Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app maker 如何使appmaker中的按钮执行某些操作并在之后打开URL_Google App Maker - Fatal编程技术网

Google app maker 如何使appmaker中的按钮执行某些操作并在之后打开URL

Google app maker 如何使appmaker中的按钮执行某些操作并在之后打开URL,google-app-maker,Google App Maker,我怎么能有一个按钮,当用户单击它时,它会根据记录的字段创建一个Google文档,在创建文档之后,它还会打开文档 我在appmaker中使用了文档示例,我可以创建Google文档,但是我找不到一种方法来打开Google文档的URL(在创建文档后),使用调用创建文档功能的相同按钮 现在,我采用了和的相同的方法,在应用程序中有一个单独的链接(在创建文档后获取文档的URL)。我不喜欢这个解决方案,因为用户需要在两个不同的地方单击 尝试从以下内容中借用此代码段: google.script.run .wi

我怎么能有一个按钮,当用户单击它时,它会根据记录的字段创建一个Google文档,在创建文档之后,它还会打开文档

我在appmaker中使用了文档示例,我可以创建Google文档,但是我找不到一种方法来打开Google文档的URL(在创建文档后),使用调用创建文档功能的相同按钮


现在,我采用了和的相同的方法,在应用程序中有一个单独的链接(在创建文档后获取文档的URL)。我不喜欢这个解决方案,因为用户需要在两个不同的地方单击

尝试从以下内容中借用此代码段:

google.script.run
.withSuccessHandler(函数(documentUrl){
...
var win=window.open(documentUrl,'.'u blank');
win.focus();
...
})
.withFailureHandler(函数(错误){
...
})
.createDoc(…);

编辑:更改为具有与文档示例相同的onClick-to-open功能(无广告块警告),但OP需要位于一个按钮中。虽然理想的解决方案是使用javascript wait,但这是可行的。此问题不需要使用AppMaker页面属性。不过,为了简单起见,我把它们放在了里面


我将详述帕维尔的答案。为了提高速度,您可以在构建内容之前创建文档并转到链接

设置名称,立即提交,打开链接,然后重新打开脚本并对该文档进行更改

我使用了Pavel的答案,更改了一个函数的名称,添加了一个参数,并添加了一个函数。其余的是从中复制并粘贴

小部件的onClick事件

if(!widget.root.subjects.CreateDocFormPanel.validate()){
返回;
}
var pageWidgets=widget.root.substands;
var props=widget.root.properties;
props.CreatingDoc=true;
props.DocumentUrl=null;
google.script.run
.withSuccessHandler(函数(documentUrl){
clearForm(pageWidgets);
props.DocumentUrl=DocumentUrl;
props.CreatingDoc=false;
var win=window.open(app.pages.DocumentSample.properties.DocumentUrl,“U blank”);
win.focus();
})
.withFailureHandler(函数(错误){
console.error(JSON.stringify(error));
props.CreatingDoc=false;
})
.createDoc(
pageWidgets.NameTextBox.value,

pageWidgets.ContentTextArea.value)谢谢Pavel,这是可行的,但是服务器脚本需要一些时间才能发回documentUrl,因此当我单击按钮时,会打开一个空白页面,因为documentUrl被视为空。我试图等待在documentUrl上放置一个while循环的值,但它确实起了作用。我生成的文档是一个两页的文件,包含10条记录。有什么解决这个问题的建议吗?很可能你做错了什么。在上面的代码段中,使用callback的参数在
with successhandler
回调中执行打开窗口代码是非常重要的,否则它将无法工作。您可以随时用实际实现更新您的问题,或将其放在下面的评论中。谢谢。它可以使用Google文档打开一个新的标签。在尝试了你的建议后,我再次尝试了帕维尔的解决方案,它也很有效(我不知道我做错了什么)。当我用SuccessHandler打开
中的选项卡时,浏览器要求弹出窗口。有没有办法避免这种情况?为什么使用AppMaker创建的链接(如中)不会导致浏览器请求允许弹出窗口?这是浏览器针对恶意脚本的防御机制。想象一下,如果你进入一个糟糕的网站,它有这样一个脚本
while(true){window.open(SPAM\u URL\u WITH_this\u script,'u blank');}
。打开的窗口数量将快速增长,您的设备将耗尽内存,您将无法停止它。所以,您需要明确允许您信任的站点打开弹出窗口。非常感谢Pavel,这非常有用。你知道为什么点击链接小部件打开这些新标签时不会发生这种情况吗?实际上,我想复制一个按钮,这样就不会让用户点击两个元素。我找不到方法,我想这就是为什么准备使用两个步骤(1生成文件和2下载文件)来避免请求允许弹出窗口的权限。@Mauricio我编辑了答案以解决此问题。您描述的问题发生在从外部脚本调用window.open函数而不是从小部件的onClick函数本身调用该函数时。