iframe 和外部网站

Posted

技术标签:

【中文标题】iframe 和外部网站【英文标题】:iframe and external website 【发布时间】:2012-01-07 05:25:15 【问题描述】:

所以我有这个代码:

<iframe id="theFrame" src="http://localhost" style="width:100%;" frameborder="0">
</iframe>

在 iframe 中加载的 localhost 站点就好了..

但是当我将 src 更改为外部网站时

<iframe id="theFrame" src="http://www.youtube.com" style="width:100%;" frameborder="0">
</iframe>

网站未加载。

我做错了什么?我知道您可以在 iframe 中使用外部网站,因为 Google 图片搜索可以这样做...

如何让外部网站在我的 iframe 中运行?

【问题讨论】:

您的 html 编码正确,但我认为您尝试访问 Youtube 的网络已阻止 youtube.com 域。您可以通过尝试不同的域来验证这一点吗? 【参考方案1】:

外部网站的原因如:

    youtube.com google.com ***.com 等

没有加载在你的框架中,是因为他们故意利用某种Frame Killer

示例(使用 jQuery)

<style> htmldisplay:none; </style>
<script type="text/javascript">
    $(document).ready(function () 
        if(window.self == window.top) 
            document.documentElement.style.display = 'block'; 
        else 
       window.top.location = window.self.location; 
    );
</script>

推荐阅读:

Framekiller (Wikipedia) Busting a tough FRAME killer

【讨论】:

有时 Framekiller 会将引用的网站弹出框架,但在上面的示例中,那些 Framekiller 设置为离开框架空白的内容。【参考方案2】:

如果你运行下面的代码sn-p:

&lt;iframe src="https://www.youtube.com"&gt;&lt;/iframe&gt;

然后看开发工具,会报错:

拒绝在框架中显示“https://www.youtube.com/”,因为它将“X-Frame-Options”设置为“sameorigin”。

这是因为您尝试访问的站点使用X-Frame-Options 标头将嵌入(通过iframeframeembedobject)限制在同一来源。所以 youtube.com 可以很好地加载带有 youtube.com 页面的 iframe,但没有其他人可以。只有嵌入式站点的站点管理员可以更改该设置。

如果您有嵌入网站的管理员,您可以将托管网站列入白名单:

X-Frame-Options: allow-from https://my-host-site.com/

这必须由您尝试嵌入的页面的服务器作为 HTTP 标头发送。它不能作为 HTML head 内的 meta 标记。这就是浏览器知道您正在嵌入的网站的方式,可以让托管的网站在iframe 中显示页面。

【讨论】:

Allow-from 已弃用,并且在现代浏览器中无法使用。【参考方案3】:

您可能遇到了与我相同的问题,很可能 iframe 被 X-frame-options 阻止或被 Deny 属性阻止。例如,如果您从外部来源访问 facebook,它将在 google chrome 中返回 DENY 响应

【讨论】:

【参考方案4】:

这似乎是 youtube 独有的问题; src="http://www.mozilla.org" 在您的代码中为我工作。如果您想在 iframe 中显示 youtube 视频,他们可能希望您在视频页面上使用“嵌入”选项?

【讨论】:

不是“仅限 YouTube 的问题”。

以上是关于iframe 和外部网站的主要内容,如果未能解决你的问题,请参考以下文章

调整外部网站内容的大小以适合 iFrame 宽度

如何在没有 iFrame 的情况下在另一个页面内显示外部网站? [关闭]

在不同网站上的 iframe 中的路线更改时,检测外部点击无法正常工作

在单击事件上保存外部域 iframe 的表单输入

替换iFrame加载外部页面+信息栏

使 document.ready 考虑来自外部 iframe 的元素