【问题标题】:Why do some websites (like facebook) load scripts in an iframe?为什么某些网站(如 facebook)在 iframe 中加载脚本?
【发布时间】:2010-02-14 20:17:37
【问题描述】:

为什么有些网站(如 facebook)在 iframe 中加载脚本?

这是否允许网站一次加载超过 2 个资源,因为 iframe 的资源位于不同的 URL?

【问题讨论】:

  • 为了记录,Gmail 做同样的事情。

标签: javascript html iframe


【解决方案1】:

您所看到的可能是“彗星”通信的应用程序,使用隐藏的 iframe 作为数据通道。根据Wikipedia对该技术的简要说明:

动态 Web 应用程序的一项基本技术是使用隐藏的 IFrame HTML 元素(内联框架,它允许网站将一个 HTML 文档嵌入到另一个 HTML 文档中)。这个不可见的 IFrame 作为分块块发送,隐含地声明它为无限长(有时称为“永久帧”)。随着事件的发生,iframe 逐渐被脚本标签填充,其中包含要在浏览器中执行的 JavaScript。由于浏览器以增量方式呈现 HTML 页面,因此每个 script 标签都会在收到时执行。

这可用于诸如聊天之类的事情,在这种情况下,消息预计不会出现明显的延迟,并且最好不会​​对新数据进行定期“轮询”。如果这是您遇到的情况,您应该会在框架中看到几个 <script> 元素,并且随着时间的推移应该添加更多。

【讨论】:

    【解决方案2】:

    编辑

    所以要真正解决您的问题...我不知道!不过,以下信息可能会有所帮助:

    Facebook 会在所有 JS 变量和函数前面加上您的应用程序 ID。

    var ID;
    

    变成

    var 1262682068026-ID;
    

    这将您的 javascript 的范围限制为仅限于您的应用程序,因此您不能使用 DOM 获取他们的朋友、电话号码、电子邮件、地址等,除非获得授权。它为您制​​作了一个小沙盒供您玩。

    有关范围界定的更多信息: Facebook Docs

    【讨论】:

    • 这如何回答这个问题?
    • SLaks的目的是做一个沙盒
    • 123-ID 如何是一个有效的变量名?认为你的意思是 123_ID。你应该更新。
    【解决方案3】:

    在 iframe 中加载的 javascript 无法访问父页面对象(跨域限制)

    【讨论】:

    • 作为“跨域限制”,这仅适用于 iframe 来自与父页面不同的域,对吧?
    • 查看我的回答:我不知道不同的域是否限制对父页面的访问,但无论如何他们都会明确地为每个函数/变量附加一个唯一的 # 以有效地将它们沙箱化跨度>
    【解决方案4】:

    他们在 iFrame 中加载彗星(又名彗星、HTTP 推送、长寿命等)连接,因为 Internet Explorer 最终会丢弃它:

    http://cometdaily.com/2007/10/25/http-streaming-and-internet-explorer/

    因为它实际上是一个连续的长轮询,所以这是一个阻止程序,这个 hack 还增加了 IE 的 2 个连接限制,从而导致更好的响应,背景信息:

    http://alex.dojotoolkit.org/2006/02/what-else-is-burried-down-in-the-depths-of-googles-amazing-javascript/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-22
      • 2021-11-11
      • 1970-01-01
      • 2016-08-12
      • 2016-06-20
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多