首先,我已经检查了this,this,this,this,this,this和this 。而且它们似乎并不能完全重复我的问题。
我有一个由Google Script生成的网络应用。在Code.gs
函数的doGet(e)
中,我具有用于处理不同网页的路由机制,下面在if else语句块中对其进行了简化。 doGet(e)
根据URL返回不同的页面,这意味着,如果URL以?v=page1
结尾,则返回page1.html
,如果URL以?v=about
结尾,则返回about.html
, 等等。如果我在浏览器的“地址URL”空间中键入整个内容,一切正常。
现在,我的home.html
有一个菜单,其中包含这些页面的超链接。如果我单击链接,则页面可以正常打开,只要默认目标是_top
。
现在,我的问题是:我在菜单下放置了iframe
,以便所有页面都可以在同一位置打开。他们失败并显示以下错误:
X-Frame-Options拒绝加载:“ SAMEORIGIN”,来自 “ https://script.google.com/macros/s/AKfycbz80HBBQPcs-sYm9CsVNT7iyeBQjySR1FXN0TmgjKc/dev?v=page1”, 网站不允许跨域框架 “ https://n-72ap4753yyujkagtmqc7xoskf2cznnrfk23rzbq-0lu-script.googleusercontent.com/blank”。
我发现原因是该应用尚未发布,因此我发布了该应用,并开始将page1.html
与.setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL)
一起返回。现在错误是:
无法在“ DOMWindow”上执行“ postMessage”:目标来源 提供 (‘https://n-72ap4753yyujkagtmqc7xoskf2cznnrfk23rzbq-0lu-script.googleusercontent.com’) 与接收者视窗的来源不符 (‘https://script.google.com’)。
该错误似乎与页面在googleusercontent.com中点击了另一个地址有关,这可能是导致问题的原因?
主页:
您可以在下面的home.html
中看到3个链接:
iframes 在我的home.html
的iframe中打开有关HTML / iframe的维基百科文章。
Page1 应该在我的page1.html
home.html
部分中打开我的iframe
,但这是发生错误的地方。
在所有内容的about.html
上关于打开_top
作为另一页,因此效果很好。但是,一旦解决了iframe问题,我也将更改该目标以在iframe
中打开。
我的文件如下:
Code.gs:
function doGet(e) {
Logger.log(e.parameters.v);
if (e.parameters.v == "page1") {
return HtmlService.createTemplateFromFile("page1").evaluate().setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
} else if (e.parameters.v == "about") {
return HtmlService.createTemplateFromFile("about").evaluate();
} else
return HtmlService.createTemplateFromFile("home").evaluate();
}
home.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<style>
#nav-wrapper {
background-color: bisque;
padding: 8px;
}
#img-logo {
height: 2%;
width: 2%
}
#nav {
display: inline-block;
list-style-type: none;
}
#nav > li {
display: inline-block;
padding: 0 24px 0 0;
}
#nav > li > a {
padding: 8px;
text-decoration: none;
outline: 0;
}
#nav > li > a:link, a:visited {
color: DarkSlateGray;
}
#nav > li > a:hover {
background-color: GoldenRod;
border-radius: 8px;
box-shadow: 4px 4px grey;
}
#iframePages {
width: 100%;
height: 800px;
overflow: scroll;
border: none;
}
</style>
</head>
<body>
<?
var url = ScriptApp.getService().getUrl();
var imgLogo = "https://png2.cleanpng.com/sh/e2fa53a06dccb65dbd183cfa6b13c455/L0KzQYm3VsIzN5dmj5H0aYP2gLBuTgRpbV5rfd9qbHWwcsPoif4ucKZyedC2YoLkebA0kP9tgZh0hp9xdX3kfn7vhfFlNaF0hOtwb37kfH75ifZtcZ9sRadrMnTkRoPsWPJkQJI2RqU8OEa3Q4q4UcUzQWg2UKU6OEW6Qoe1kP5o/kisspng-the-female-brain-human-brain-polygon-human-head-polygonal-rifling-5b2da62e8bc8a1.3386439115297183185726.png";
?>
<script>
var url=<?= url ?>;
console.log(url);
</script>
<nav>
<div id="nav-wrapper">
<a href="<?= url ?>" class="brand-logo"><img id="img-logo" src="<?= imgLogo ?>"></a>
<ul id="nav">
<li><a href="https://en.wikipedia.org/wiki/HTML_element#Frames" target="iframePages">IFrames</a></li>
<li><a href="<?= url ?>?v=page1" target="iframePages">Page1</a></li>
<li><a href="<?= url ?>?v=about">About</a></li>
</ul>
</div>
</nav>
<iframe id="iframePages" name="iframePages"></iframe>
</body>
</html>
page1.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>Page 1</h1>
</body>
</html>
about.html:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<h1>About</h1>
</body>
</html>
URL:
https://script.google.com/macros/s/AKfycbxBBaGG_rZl1jAuNqDzL8O9un7bfn9Qm_cfA_nAjMxE1w-dl2U/exec
控制台中的错误。左侧框架为空。
请记住,这是我完整应用程序的简化版本,它具有相同的行为,因此我可以共享。
任何人都可以阐明一下吗?