Google脚本网络应用:无法在“ DOMWindow”上执行“ postMessage”:提供的目标原点与收件人窗口的原点不匹配

时间:2019-12-29 16:09:20

标签: html google-apps-script iframe cross-domain same-origin-policy

首先,我已经检查了thisthisthisthisthisthisthis 。而且它们似乎并不能完全重复我的问题。

我有一个由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

错误图片: enter image description here

控制台中的错误。左侧框架为空。

请记住,这是我完整应用程序的简化版本,它具有相同的行为,因此我可以共享。

任何人都可以阐明一下吗?

0 个答案:

没有答案