尝试导航顶级窗口的框架与'allow-top-navigation-by-user-activation'



我试图通过点击应用程序的相同URL重新加载页面,但在googleappscript中得到此错误,以前它工作正常,但不是它已经停止工作

function reLoad() {
google.script.run
.withSuccessHandler(function(){
window.open("https://script.google.com/a/google.com/macros/s/AKfycbxqBb8dv488gLQjYCmJDGJ98EiX3Ipo5pUHmAHoRmY/dev","_top");
})
}

Google最近更新了他们的iframe限制:

在HTML Service iframe沙盒中,允许内容导航其顶级浏览上下文的allow-top-navigation是受限制的,并且没有在沙盒中设置为属性。相反,allow-top-navigation-by-user-activation属性被添加到沙盒中。

如果你需要重定向你的脚本,添加一个链接或一个按钮,让用户采取行动。

如果从按钮的onclick处理程序调用该函数,则该函数应该工作。该功能应直接与最终用户的点击相关联。

引用:

  • Html规范:allow-top-navigation-by-user-activation(参见瞬态激活)

我遇到了同样的问题,与google.script.run有关,但它发生不一致:

我有一个按钮,它的点击处理程序是一个函数,就像这样

function reload() {
google.script.run
.withSuccessHandler(function(){
window.open("https://someurl", "_top");
})
.someBackendFunction()
}

有时当我点击按钮时,页面会按预期重新加载,但有时会出现错误

Unsafe attempt to initiate navigation for frame with origin '...'. The frame attempting navigation of the top-level window is sandboxed with the 'allow-top-navigation-by-user-activation' flag, but has no user activation (aka gesture).

根据一些实验,以及对TheMaster链接的HTML规范的仔细阅读,这种行为似乎取决于用户单击按钮和脚本试图导航离开之间所经过的时间。(在我对Chrome v.116的实验中,超过5秒的后端执行总是触发错误。)

如下所示:

预计瞬态激活持续时间最多为几个秒,以便用户可以感知到之间的链接与页面的交互以及调用激活的页面API。

我的解决方法是:在google.script.run的成功处理程序回调中,我向用户呈现一个新按钮," Reload Page,"其单击处理程序执行导航。这避免了点击按钮和重新加载页面之间的延迟。

最新更新