Mah*_*hdy 3 iframe web-applications google-apps-script
我有一个多页网络应用程序。我希望登录后,用户可以看到他的队友列表并标记他们的出勤状态。我的问题是我无法在 iFrame 中显示这一点,而不是在 google 脚本原始框架中显示这一点。
例如,我想将其 iFrame 到我自己的网页上。这两天我无法克服这个问题,我读了很多这方面的帖子,也从头开始尝试了另一个应用程序,但还没有运气。
为了澄清起见,我使用渲染函数在框架内重定向用户。正如 @theMaster 提到的,它不是一个多页面 Web 应用程序。
这是我的 doGet 和 Render 函数:
function doGet(e){
// Logger.log(e);
Route.path("login",loadLogin);
Route.path("admin",loadAdmin);
Route.path("view",loadView);
Route.path("form",loadForm);
if (e.parameters.id){
LastID=e.parameters.id[0];
}
if (e.parameters.t){
curT=e.parameters.t[0];
}
if (Route[e.parameters.v]) {
return Route[e.parameters.v]();
} else {
return render('W-home');
}
}
function render(file, argObject){
var page = HtmlService.createTemplateFromFile(file);
if (argObject){
var keys = Object.keys(argObject);
keys.forEach(function (k){
page[k]=argObject[k];
});
}
var evalPage =page.evaluate();
// if (!xFrame){return evalPage;};
return evalPage.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}
Run Code Online (Sandbox Code Playgroud)
我可以从主页转到登录页面,但之后,即使它也不让我去谷歌。在某些情况下,也只是返回框架内的空白页面。
这是我的客户端 JavaScript 示例代码。
function goToForm(EmpNo) {
var link = "<?!=ScriptApp.getService().getUrl()?>" + "?v=form&id=" + EmpNo[1] + "&t=" + EmpNo[2];
location.href = link;
// I tried different way to see if i can conqure this!
// if (clickBTN= 'a') {
// window.open(link, "_self");
// } if (clickBTN= 'b') {
// location.href=link;
// } if (clickBTN= 'c') {
// openNewURLInTheSameWindow(link);
// }
}
Run Code Online (Sandbox Code Playgroud)
我还有两个全局变量xFrame来设置 XframeOptionsModeallowAll或不设置,并将baseHTM 页面上的基本目标切换为“_top”或“_self”。
你可以试试
window.top.location = link;
Run Code Online (Sandbox Code Playgroud)
它将在顶部框架中加载链接。如果您在网站中构建网络应用程序本身,那么您应该使用
window.parent.parent.location = link;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为沙箱会阻止导航文档中的其他框架。sandbox="allow-top-navigation"只允许顶部框架导航,不允许中间框架导航。由于顶部框架是您的网站而不是script.google.com,因此无法导航,您将收到错误消息
不安全的 JavaScript 尝试
https://myexamplesite.com从 URL 为 https://*.googleusercontent.com/... 的框架发起对 URL 的框架的导航... 尝试导航的框架已被沙盒化,因此不允许导航其祖先。
window.postMessage()
==================
|Your site |<-myexamplesite.com [TOP#0]
| |
| ============= |
| |GASWebApp |<-|--script.google.com[Frame#1]
| | | |
| |========= | |
| ||SandBox| | |
| ||User |<-|--|-- Where your html code is
| ||Frame | | | (*.googleusercontent.com)
| |========= | | [Frame#2 and #3(Double nested iframe)]
| | | |
| ============= |
| |
| |
| |
==================
Run Code Online (Sandbox Code Playgroud)
沙盒 Html:
window.top.location = link;
Run Code Online (Sandbox Code Playgroud)
顶部框架(#0):
window.parent.parent.location = link;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4229 次 |
| 最近记录: |