google-apps-script - 如何在主页中显示经典的 Google 协作平台搜索框查询?
问题描述
我需要将Google 协作平台搜索框文本的内容传递到主页或主页。到目前为止,我已经尝试了以下...
代码.gs:
function doGet(e) {
var word = e.parameter.q;
var template = HtmlService.createTemplateFromFile("Index");
return template
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
function display() {
return word;
}
索引.html:
<!DOCTYPE html>
<html>
<head>
<?!= display(); ?>
<base target="_top">
</head>
<body>
</body>
</html>
我发布了脚本并将其部署为 Web 应用程序,并将脚本成功嵌入到主页中。此外,站点搜索已正确配置为在Additional Search Providers中包含Google Search Appliance 网址。
主要问题是脚本在尝试显示输入到搜索框中的单词时会打开一个新页面。请帮助我,以便搜索框文本直接显示在主页中,而无需打开额外的 HTML 输出。
¶
以下脚本获取站点https://sites.google.com/site/ei38f7s783hu2hhs中的搜索框输入,并将其显示在 HTML 输出中:
代码.gs:
function doGet(e) {
var word = e.parameter.q; // this gets the search box input
return HtmlService.createHtmlOutput(word);
}
索引.html:
<!DOCTYPE html>
<html>
<head>
<?!= display(); ?>
<base target="_top">
</head>
<body>
</body>
</html>
这个想法是将搜索框文本直接写入主页,而不是外部 HTML 输出。所以我添加了一个Index
文件,就像在前面的代码中一样,看看结果是否会显示在主页上,但它不起作用。
该脚本已部署为 Web 应用程序(在本例中,查询是单词north)→ https://script.google.com/macros/s/AKfycbxeaPOX52qr8kYzD8jXfI9vzsWpxI49AHajaJx0qSSmastoMHle/exec?q=north
如果需要进一步解释,请告诉我。
¶¶¶¶¶如何配置站点搜索¶¶¶¶
将脚本发布为 Web 应用程序后,必须配置站点搜索:
在您的 Google 网站中:
- 去齿轮
- 选择管理站点
- 转到配置搜索
- 点击高级
- 单击按钮添加提供商
- 在类型中选择Google Search Appliance
- 填写名称(→ 新搜索按钮的文本)
- 添加Google Search Appliance 网址(来自已发布的脚本)
- 点击确定
这样,新发布的脚本就可以直接通过doGet(e)
和获取搜索框的值了e.parameter.q
。
解决方案
- 您希望在文本输入框中输入一个值,并且希望将从 Google Apps 脚本端检索到的值放到页面中而不移动页面。
我可以像上面那样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
问题和解决方法:
从您更新的问题中,我可以理解您使用的是经典类型的 Google 网站。在这种情况下,我认为 Class SitesApp 仍然可以使用。通过使用它,可以将结果值放入如下页面。
function doGet(e) {
var word = e.parameter.q;
var site = SitesApp.getSite("###");
site.getChildren()[0].setHtmlContent(word);
var template = HtmlService.createTemplateFromFile("Index");
return template
.evaluate()
.setSandboxMode(HtmlService.SandboxMode.IFRAME);
}
但是很遗憾,页面无法自动刷新,Web Apps 的打开标签也无法关闭。所以我想提出以下解决方法。
在此解决方法中,使用当前类型的 Google 站点。Web 应用程序嵌入到页面中。此解决方法的示例脚本如下。
用法
1.准备示例脚本:
请将以下脚本放入 GAS 项目并将 Web 应用程序部署为新版本,如“我”的“执行应用程序为:”和“任何人,甚至匿名”的“谁有权访问该应用程序:”。请复制 Web Apps 的 URL。
谷歌应用脚本:Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("index");
}
function myFunction(e) {
return "Received value is " + e;
}
HTML&Javascript:index.html
<input type="text" id="text" name="text">
<input type="button" value="ok" onclick="sample()">
<div id="result"></div>
<script>
function sample() {
const t = document.getElementById("text").value;
google.script.run.withSuccessHandler(e => {
document.getElementById("result").innerHTML = e;
}).myFunction(t);
}
</script>
2.使用当前类型创建新站点:
- 使用当前类型创建新站点。
- 单击左侧的“嵌入”图标。
- 在“By URL”中,请输入 Web Apps 的 URL。
- 单击“插入”按钮。
- 在测试站点时,请单击顶部的“预览”。
这样,Web 应用程序就会运行,您可以看到文本框。当您输入“样本”和“确定”按钮的值时,您可以看到从 Web 应用程序返回的“接收值是样本”,而无需打开新选项卡。
笔记:
- 当您修改 Web Apps 的脚本时,请将 Web Apps 重新部署为新版本。由此,反映最新的脚本。请注意这一点。
参考:
推荐阅读
- jquery - 如何在c3图表中使用嵌套的json值| jQuery
- react-native-android - 制作项目时如何修复“复制模板”中的错误?
- r - 基于条件的分布抽样
- r - 如何在 R 的 for 循环中仅跳过特定类型的错误?
- angular - Angular 8 应用程序调用 Springboot 应用程序返回空
- android - YouTube 仅在 WebView 中播放音频
- terraform - 小部件部分上的循环
- python - Python Flask 选择下拉项提交按钮
- java - 如何将架构转换为 Java 结构化流中的列?
- airflow - 气流基本身份验证导致登录页面上出现“重定向过多”