【问题标题】:snap.com snapshots disobeys Same Orgin Policy?snap.com 快照违反了同源政策?
【发布时间】:2009-05-20 08:00:00
【问题描述】:

我正在尝试编写一些 Javascript,以根据对不同域上的服务器的 HTTP GET 请求显示数据。根据我的阅读,由于 SOP(同源政策),这变得很棘手。

我很好奇 snap.com “快照”(网页预览)的工作原理。这是一个示例页面:http://premshree.livejournal.com/66129.html

有人能解释一下这怎么可能吗?要启用 snap.com 的“快照”,您只需在标题中添加一些 Javascrpt。示例网页似乎违反了 SOP。

【问题讨论】:

    标签: javascript ajax cross-domain


    【解决方案1】:

    “快照”JavaScript 托管在 snap.com 上,因此它可以访问 snap.com 的所有内容,即页面预览,因为它实际上遵守同源政策。但是,它无法调用 livejournal.com 上的任何页面。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      按照 Ian 的回答,您可以让 AJAX 使用 JSONP 跨越 SOP 提出的域障碍。什么是 JSONP?它是我们都知道和喜爱的同一个 JSON 对象,但它被一个函数包裹: JSON:

      {
        prop1: "a",
        prop2: 7
      }

      JSONP:

      myfunction(
      {
        prop1: "a",
        prop2: 7
      });
      
      如您所见,JSON 对象作为参数传递给myfunction 函数。因此,如果您要使用简单的 script 标记链接到托管在不同域上的脚本资源,并且该资源返回 JSONP 数据,那么您可以简单地定义一个函数 myfunction,它接受一个 JSON 对象,然后执行有什么东西。 JQuery 支持使用getJSON 方法的JSONP Ajax 调用。 jQuery 插入一个 script 标记,而不是进行 AJAX 调用,该标记指向您尝试从中获取数据的 URL。当脚本加载时,你的回调函数就会被执行,瞧! - 你有 JSON 数据!这种技术有 3 个先决条件。

      1. 您尝试从中请求数据的服务返回 JSON(默认情况下或使用参数请求时)。
      2. 服务支持 JSONP,允许您指定用于包装 JSON 数据的回调函数。
      3. 您对这个外部资源的信任足以让他们的代码在您的站点上执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-29
        • 2016-03-03
        • 2021-03-24
        • 2021-12-20
        • 2019-11-04
        • 2016-07-19
        相关资源
        最近更新 更多