问题标签 [google-caja]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
540 浏览

html - 如何让 Google Apps 脚本 html 服务使用 :after 显示数据属性?

我有一个使用 html 服务的简单应用程序脚本,我需要 :after 伪选择器。

将问题归结为一行代码,我有

每个 jsfiddle,预期的输出将是“现在你看到我现在你没有”,但我只得到“现在你看到我”

如果我按预期删除 :after I get Now you see me

FWIW 我正在使用 .setSandboxMode(HtmlService.SandboxMode.NATIVE)

谁能告诉我我做错了什么?

0 投票
1 回答
595 浏览

google-apps-script - 是否可以使用 HtmlService.createHtmlOutput 包含客户端脚本,还是必须使用替代方法?

我最近开始使用 Google Docs 电子表格,并开始尝试在表格中编写脚本。在一个特定的工作表中,我想向用户显示一个自定义对话框,我已经设法做到了。

现在,我想让对话框中的一些表格行可点击。我编写了一些应该完成这项工作的代码,但 Caja 似乎正在删除我编写的代码。

代码的简化版本(仍然存在问题):

我在显示的对话框中得到的是:

我认为 Caja 出于某种原因正在剥离代码,但我似乎无法在任何地方找到任何文档或示例,说明如何正确包含脚本以Code.gs使它们在 Caja 清理后保持完整。

我假设其他人已经遇到了这个问题,我希望有人能分享一个解决方案。

TLDR 版本:

如何在由创建的对话框中包含 JavaScript HtmlService.createHtmlOutput

0 投票
1 回答
305 浏览

gwt - Google Drive 中的 Caja 安全性,GWT 不兼容?

我想将 aGWT作为侧边栏嵌入到 Google 文档中。对于一个简单的jquery网页,一切正常,但是当我嵌入最小的 GWT 应用程序时,它不会出现。我将我的 GWT 应用程序减少到最低限度:

我像这样包含这个 GWT 应用程序:

在代码.gs

在 sidebar.html 中

如前所述,在 HTML 文件中包含 jquery 并使用 jquery 语句调用远程脚本在这种方法中效果很好。

现在在 Google 文档中运行 web 应用程序,javascript 和 HTML 是 CAJA-sanitized,我从我在这里读到的理解:https ://developers.google.com/apps-script/guides/html/restrictions 。然后有一个SANDBOX mode你可以设置为 NATIVE or EMULATED。我都试过了。

您可以使用 setSandboxMode() 方法在 Caja 的两个版本之间进行选择: NATIVE 模式比 EMULATED 模式施加的限制更少,并且通常运行得更快。相比之下,EMULATED 模式更有可能在不支持 ECMAScript 5 严格模式的旧浏览器中工作,尤其是 Internet Explorer 9。(非常旧的浏览器,包括 Internet Explorer 8 及更低版本,通常与 HTML 服务不兼容。)

无论如何,什么都没有出现,从下面的日志中,错误是:

对象 [对象对象] 没有“替换”方法

如果我可以重用我的应用程序小部件的一部分来嵌入到侧边栏,那就太好了......

有人可以阐明一下吗?

谢谢

作为参考,控制台输出:

沙盒模式:NATIVE 904833574-maestro_htmlapp_bin_maestro_htmlapp.js?lib=MK7wi1l9-fBV4ffZJJ9h74zcqOPkxWgv_:192

对象 [对象对象] 没有“替换”方法 904833574-maestro_htmlapp_bin_maestro_htmlapp.js?lib=MK7wi1l9-fBV4ffZJJ9h74zcqOPkxWgv_:66

0 投票
1 回答
1232 浏览

google-apps-script - 从 AppsScript 和 CAJA 提供页面时如何加快 Android WebView 的加载?

我有一个 AppsScript UI,它通过我在 Chrome 中的 Windows 笔记本电脑在 2 到 3 秒内加载。当尝试在 WebView 中通过 Android 应用加载相同的 UI 时,加载需要 27 秒。使用运行 Android KitKat 4.4(SDK 版本 19)的新 (2013) Nexus 7。

我不知道如何加快加载速度。我正在遵循 AppsScript 网站上发布的所有最佳实践(使用 CacheService 等),并且可以认为问题一定是 Android App/Webview?

在 Android 中,初始页面加载需要 13 - 14 秒,然后我有一个加载屏幕,而内容脚本再检索数据 13 - 14 秒。在我的笔记本电脑上,初始页面加载需要 1 秒,然后有一个加载屏幕,而内容脚本再检索数据 1-2 秒。

我使用了 Chrome 远程调试工具,可以确定检索到的资源数量没有差异。我没有关于如何加快加载速度的想法。任何建议表示赞赏!

0 投票
4 回答
9664 浏览

javascript - 如何从 Google Apps Script HTML Google Site Gadget 中的 JavaScript 打开 URL 链接

我在 Google Apps 脚本中编写了一个 HTML(不是 UI)小工具,以嵌入到 Google 站点中。该小工具会显示一个下拉菜单,其中包含包含 URL/显示名称值/文本对的选项。

我想在小工具中放置一个按钮,该按钮会打开一个与所选 URL 对应的新窗口。但是,基本上,我在执行时收到“对象不包含‘打开’方法”错误

有没有解决的办法?我可以(并且已经)创建了带有成功打开其他窗口的锚标记的小工具,但似乎不允许从 javascript 执行相同的操作。

任何实现功能的东西都很好。基于 jQuery 的解决方案会很棒。

谢谢。

0 投票
1 回答
181 浏览

javascript - 使用 Google HtmlService 服务时输入模式属性不起作用

我真的很想对使用 Google Apps HtmlService 提供的一些简单表单使用本机 html5 验证。

在 jsfiddle 中,表单按预期工作:不匹配六位数字的输入会导致特定于浏览器的验证提示。但是,使用 HtmlService 从 Google Apps 提供的代码完全相同:

导致表单正确显示,但没有对输入进行验证。可以在这里测试。我也尝试过使用脚本设置模式属性;这也失败了。

在每种情况下使用的浏览器都是相同的,jsfiddle 上的肯定结果证明浏览器正确支持模式属性。

任何帮助将不胜感激!

0 投票
2 回答
248 浏览

google-apps-script - 如何让 Caja 保留脚本标签内的模板文本?

我试图看看是否可以使用ICanHazHandlebars来构建我的 Google Docs Add-on 的侧边栏。然而,事实证明 Caja 正在从我的脚本标签中剥离实际的 HTML。有什么办法可以防止这种情况发生吗?

假设我的 Handlebars 模板是这样的:

然后目前,在运行时是这样的:

因此,即使我可以使用 查找它$('#user").html(),它也只会给我一个空模板。有没有办法阻止 Caja 这样做?

0 投票
1 回答
282 浏览

javascript - Google Caja:示例 html4 def 文件?

我正在尝试使用 Caja 的 JSHtmlSanitizer来实现这个介绍教程来清理 HTML。

我在html-sanitizer.jsreference is not defined的第 1056 行收到错误,因为该变量未定义。我相信这是一个定义文件。我在哪里可以得到这个定义文件的样本?我想我发现了一个可以追溯到 2008 年的非常旧的 def 文件,它不再在最新版本的 repo 中。html4

0 投票
1 回答
213 浏览

javascript - parseXML 在 Google Apps 脚本中返回 INVALID XML

在 Google Apps Script(不是 Google Script 而是 Caja-ed Javascript)中的 Javascript 文件中,我想将字符串解析为 XML 文档。在 GAS 之外,这有效:

但在 GS 文件中:

parseXML 声称我的 xml 无效。我认为这对于 GAS 对我的 JavaScript(Caja?)所做的任何预处理都很奇怪。有解决办法吗?我试过 Jquery 1.11 和 1.9.0

0 投票
1 回答
706 浏览

javascript - 使用 Google Caja 运行用户提供的 Javascript

似乎官方示例使用了一个caja.js文件,该文件只是包装了iframe一个从托管 caja 编译服务的服务器加载 URL,而后者又从某个 URL 获取输入。相关的 API 可在此处获得。

但是,我真正想要的是安全地(并且反复地)运行用户提供的一段 Javascript,如下所示:

有没有办法直接做到这一点?这里的代码有编译器。为什么我不能只使用它来编译代码然后在模拟上下文中运行它?是因为在浏览器中获取安全上下文的唯一方法是iframe? 而且,如果是这样,有什么方法可以使用 aniframe直接运行给定的源代码,而不必从外部 URL 获取它?