我正在尝试将 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-Options
Groups 发送的标头:
Invalid 'X-Frame-Options' header encountered when loading
'https://groups.google.com/forum/embed/?place=forum/myforum
&domain=mydomain.org&showtabs=false&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-FROM
in 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-FROM
为https://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"
+ "&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
。)这正是谷歌的指示所说的。你知道,这真的很尴尬......