2

我正在尝试将 Google Group 嵌入到网站的网页中,但我无法让它在所有浏览器中运行,并且不知道为什么。使用<iframe>Google Groups 配置系统提供的 JavaScript 代码,当我在 Safari(版本 6.1,8537.71)和 Chrome(32.0.1700.107)中查看页面时,一切正常,但不是在 Mac OS X 10.8.5 上运行的 FireFox(26.0) . 运行 FireFox 的调试控制台会显示以下错误:

Load denied by X-Frame-Options: https://groups.google.com/ 
does not permit framing by http://mysite.org/mypage

http://mysite.org/mypage当然,实际的页面 URL 在哪里)。现在,奇怪的是,使用 Chrome 和 Safari 中的调试控制台,它们也都报告了一个错误——但它是关于X-Frame-OptionsGroups 发送的标头:

Invalid 'X-Frame-Options' header encountered when loading
'https://groups.google.com/forum/embed/?place=forum/myforum
&amp;domain=mydomain.org&amp;showtabs=false&amp;parenturl=
http%3A%2F%2Fmydomain.org': 'ALLOW-FROM https://groups.google.com' 
is not a recognized directive. The header will be ignored.

这似乎暗示它在 Safari 和 Chrome 中工作的原因是谷歌发送了一个无效的标头(这似乎不太可能),因此 Safari 和 Chrome 忽略了它,或者两个浏览器都无法解释X-Frame-Options,据我所知, 不应该是这样。

谁能想到可能发生了什么,或者建议我可以检查哪些其他可能的问题?

过去关于 SO的问题似乎遇到了类似或可能相同的问题,但 OP 的问题显然自行消失了,而无论我是否登录或退出我的 Google 帐户,我的问题仍然存在。

编辑 2014-02-06 #1

我现在确定 Chrome 和 Safari 不支持ALLOW-FROMin X-Frame-Options; 这解释了控制台中的消息,并且可能解释了为什么这些浏览器不会阻止嵌入的 Google Groups 页面。此外,如果我正确解释ALLOW-FROM选项的定义,作为值提供的 URI应该是封闭页面;换句话说,谷歌应该返回ALLOW-FROM mydomain.org不是它当前发送的值。我想我一定是做错了什么,但我完全按照谷歌的说明设置 iframe,包括关于提供的部分&domain=yourdomain.com

编辑 2014-02-06 #2

鉴于上述情况,我的原始问题基本上得到了回答:Safari 和 Chrome 显示嵌入页面的原因是它们目前忽略了安全标头值,而 FireFox 没有,并且正确阻止了嵌入,因为 的值ALLOW-FROM不是根据需要包含 iframe (mydomain.org) 的页面的域。

所以现在的问题是,为什么 Google 设置ALLOW-FROMhttps://groups.google.com而不是mydomain.org.

编辑 2014-02-06 #3

解决了。谷歌发送X-Frame-Options值的原因是我的<iframe>代码不正确。由于我现在无法重建的原因,我被引导相信src属性值中的 & 符号需要被转义,如下所示:

<html><body>
<iframe id="forum_embed" src="javascript:void(0)"
  scrolling="no" frameborder="0"  width="746" height="1200">
</iframe>
<script type="text/javascript">
  document.getElementById('forum_embed').src =
     "https://groups.google.com/forum/embed/?place=forum/sbml-discuss"
     + "&amp;parenturl=" + encodeURIComponent(window.location.href);
</script>
</body></html>

事实上,这样写是行不通的。但以下是:

<html><body>
<iframe id="forum_embed" src="javascript:void(0)"
  scrolling="no" frameborder="0"  width="746" height="1200">
</iframe>
<script type="text/javascript">
  document.getElementById('forum_embed').src =
     "https://groups.google.com/forum/embed/?place=forum/sbml-discuss"
     + "&parenturl=" + encodeURIComponent(window.location.href);
</script>
</body></html>

(不同之处在于&parenturl。)这正是谷歌的指示所说的。你知道,这真的很尴尬......

4

1 回答 1

0

这由 iframe src 属性的 parentUrl url-param 控制。

它可能只是 chrome 控制台对其进行编码,但看起来 iframe src 的 URL 具有编码的“&”字符。

您是否对 parentUrl 属性进行硬编码?或者您使用的是“encodeURIComponent(window.location.href)”
(来自帮助文档:https ://support.google.com/groups/answer/1191206?hl=en )

于 2014-02-06T04:51:27.930 回答