【问题标题】:Certain websites won't appear with Iframe and .load() function某些网站不会出现 Iframe 和 .load() 功能
【发布时间】:2017-06-24 01:01:14
【问题描述】:

我正在尝试在另一个网页(未托管在我的服务器上)上加载网页,但由于跨站点/安全脚本,我无法加载某些网页。例如,谷歌不会出现在 iframe 中,或者如果我使用 jquery:

 <script>
      $("#siteload").html('<object data="http://google.com">');
    </script>

请注意:我并不是专门加载谷歌,只是任何不允许 iframe 的网页..

有人知道解决方法吗?在我的服务器上加载一个 .html 文件怎么样,这行得通吗?以及如何?

感谢您的帮助。

【问题讨论】:

  • 没有解决方法,除了可能重新代理 google.com 服务器端,将基本标记设置为相关域以处理所有可能的相对链接路径,然后为链接中的所有链接和链接中的链接设置相同的链接在其他指向其他域的链接中......我想你最好买谷歌
  • 查看控制台中的错误信息。

标签: javascript jquery html iframe


【解决方案1】:

这是有意为之,网站开发者可以在响应中设置某些标头,以控制哪些 URL(其他网站)可以在 &lt;iframe&gt;, &lt;frame&gt; or &lt;object&gt; 中加载其内容。这是一种保护您的网站免受Clickjacking 等攻击的方法。

例如:大部分浏览器都支持X-Frame-Options标头

X-Frame-Options 有三个可能的值:

DENY
The page cannot be displayed in a frame, regardless of the site attempting to do so.

SAMEORIGIN
The page can only be displayed in a frame on the same origin as the page itself.

ALLOW-FROM uri
The page can only be displayed in a frame on the specified origin.

请注意,Chrome、Safari 等不支持 X-Frame-Options: Allow-From。

现代浏览器使用新的内容安全策略 (CSP) 来处理这些问题。所以你可以使用新的标题来控制它:

内容安全策略:框架祖先

所有较新的浏览器都支持的 CSP 2.0 也完全向后兼容。

我知道这不是您问题的答案,但这些信息会让您了解为什么无法将网站加载到 iFrame 中。

【讨论】:

    【解决方案2】:

    某些网站会阻止使用 iframe。谷歌就是其中之一。

    编辑:我认为谷歌正在发送同源设置。

    【讨论】:

      【解决方案3】:

      一些可能的解决方法:

      1. 不要使用 iframe,使用 div 和 $.load()

      2. 根据具体情况查找解决方案,如果是 Google,请改用 Google Custom Search Engine(对于大多数事情都有 iframe 友好的解决方案,但找到它们需要时间)

      3. 使用代理

      4. 在有条件的情况下(谷歌就是这种情况),制作自己的页面并尝试匹配原始(谷歌)页面的样式,然后使用API​​获取搜索内容

      请注意,3 和 4 可能会花费很多钱,具体取决于流量

      【讨论】:

      • 谢谢吉奥!看来 $.load() 也被阻止了。在代理的情况下,您的意思是编辑 URL 本身吗?您能否将我转发到我可以尝试代理不起作用的网页的资源?再次感谢。
      • 我应该说 - 就 google 而言,有两个问题:你需要在同一个来源,所以 $.load() 不起作用,你不能加载iframe,所以 iframe 不起作用。我不建议使用代理,因为它可能会变得昂贵,但我的意思是这样的:frankhq.io/blog/2012/11/14/… 访问该站点的人连接到您的服务器,您的服务器检索 google 页面并将其发送给他们。仅供参考,我曾经遇到过类似的问题,我最终得到了解决方案 2 和 4 的混合
      • 也许这不是我能给你的最好的链接......最重要的是,这取决于你有什么服务器。例如。如果是节点,请使用类似 node-http-proxy
      猜你喜欢
      • 2015-01-02
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      相关资源
      最近更新 更多