为 HtmlService web 应用程序使用自定义 url

问题描述 投票:0回答:5

有没有办法使用特定的 cname 来运行 Htmlservice web 应用程序? 我想使用 app.domain.com 之类的用户来运行 htmlservice 应用程序。

我发现这在 Google 网站内有效,但 Google 网站无法正确管理标签

google-apps-script web-applications
5个回答
4
投票

不可能。您最多可以使用自定义 url 并对其进行编程以重定向到您的应用程序脚本 webapp。这样就很容易输入和记住。


3
投票

@Karl_S 发布的解决方案适用于已发布的 /exec url,但不适用于 /dev url。此外,响应式设计会丢失,因为框架重定向会跳过 html 包装器中的视口设置。另一种方法是在您的域上托管包装 html 页面,并在头部添加视口设置,同时保留框架重定向的其余部分。例如,以下内容对我有用:

<html><head>
  <title>My App</title>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">   
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <frameset rows="100%">
  <frame src="https://script.google.com/a/.../exec" 
         title="My App" 
         frameborder="0" 
         noresize="noresize">
  </frameset>
</html>

还要确保在禁用跨域限制的情况下发布脚本,即在脚本中确保调用

HtmlService.createTemplateFromFile(...)
  .evaluate()
  .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)

希望它对某人有帮助。


2
投票

我已经发布了通过带有屏蔽的转发子域工作的网络应用程序。 URL 不会更改,客户端交互可以正常工作,并且也会回传到我的文件中。因此,而不是 https://script.google.com/a/bondwood.net/d/1y3iLTLT.... 我有 mysubdomain.bondwood.net 如果我想传递参数,我必须抛出一个虚拟字符,所以 mysubdomain.bondwood.net/n?arg1=xyz&arg3=abc

请注意,目前任何响应式设计都会通过子域丢失,但可以通过原始 URL 运行。这是我目前发现的唯一不起作用的事情。


0
投票

CNAME 记录是规范名称记录的缩写,是域名系统 (DNS) 中的一种资源记录,用于指定域名 是另一个域(“规范”域)的别名。所有信息,包括子域、IP 地址等,均由规范域定义。 CNAME

但是 HTML 服务允许您提供可以与服务器端 Apps 脚本功能交互的网页HTML 服务:创建和提供 HTML

对于公共页面(不适用于内部应用程序)来说,这是一个可疑的优势。

如果您确实想要拥有 Google Apps 脚本服务器,您需要在网络服务器上发布页面并通过 REST 进行交互。

是的,你会失去客户端API。你真的需要吗?

例如,您可以发布 GihHib 页面 使用 GitHub Pages 设置自定义域

看看我的简单应用程序,它部署在Google Drive Host

干杯!


0
投票

我找到了一个改进 Rehan 答案的解决方案。加载框架集大约需要 10 秒,但使用 iframe 只需 1-2 秒。

首先我确保我的域名具有 SSL。

这是我在我的谷歌脚本中添加到 doGet 的代码:

function doGet() {
  // Create a template from your index.html file
  var template = HtmlService.createTemplateFromFile('index');

  // Evaluate the template and serve HTML content
  return template.evaluate().setSandboxMode(HtmlService.SandboxMode.IFRAME)
.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

然后我将以下内容添加到 home.html (我使用 godaddy)。将样式高度和宽度设置为 100vh 很重要,这样边缘周围就没有空白。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>my site</title>
<style>

    /* Remove border and padding from iframe */
html,body{
            width:100%;
            height:100vh;
            overflow:hidden;
            margin:0px;
            padding:0px;
            border:none;
        }
        iframe{
            width:100%;
            height:100vh;
            overflow:hidden;
            margin:0px;
            padding:0px;
            border:none;
        }
</style>
</head>
<body>
<!-- Iframe container -->
<div id="iframe-container">
    <iframe id="my-iframe" src="https://script.google.com/a/macros/.../exec" width="100%" height="600" frameborder="0"></iframe>
</div>
</body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.