【发布时间】:2020-11-11 14:25:24
【问题描述】:
我有一个多页 Web 应用程序。我希望在登录后,用户看到他的队友列表并标记他们的出勤状态。我的问题是我无法在 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);
}
我可以从主页转到登录页面,但在那之后,即使它也不让我去谷歌。在某些情况下,也只是在框架内返回一个空白页。
这是我的客户端 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);
// }
}
我还有两个全局变量 xFrame 用于将 XframeOptionsMode 设置为 allowAll 和 base 将 HTM 页面上的基本目标切换为“_top”或“_self”。
【问题讨论】:
-
经过一番测试,我相信
window.postMessage()是唯一的办法。 -
@TheMaster 我会检查并告诉你。我不熟悉这个;-)
标签: google-apps-script iframe web-applications