【问题标题】:Making JavaScript call across domains跨域进行 JavaScript 调用
【发布时间】:2011-04-15 20:53:12
【问题描述】:

这是目标:

移交引用远程服务器上的 JavaScript 文件的脚本标记。该 JavaScript 文件应返回 HTML,然后将显示在调用 HTML 页面上。

我尝试通过两种方式解决这个问题:

首先,我尝试在 JavaScript 中使用 XMLHttpRequest 来调用这个远程服务器。在 IE 中,它会按预期工作,但 FF、Safari 和 Chrome 会返回一个空响应。我从研究中得到的总体反应是,请求被阻止,因为它尝试访问的服务器与其运行的位置不同(都是本地主机,但端口不同)。

其次,我研究了 Google Gadgets 之类的东西是如何工作的,因为它们有效地为您提供了一个引用外部 JavaScript 的简单脚本标记。据我所知,似乎有某种 iframe 操作只是通过使用的基本 url 进行的(下面的示例)。这似乎是要走的路,即使使用 iframe 不是我最初的想法。我猜 Google 代码会将 iframe 作为 HTML 返回到嵌入了此脚本的 HTML 文件。

对我应该如何进行有什么建议吗?

<script src="http://www.gmodules.com/ig/ifr?url=http://ralph.feedback.googlepages.com/googlecalendarviewer.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script>

【问题讨论】:

    标签: javascript iframe xmlhttprequest cross-domain


    【解决方案1】:

    JSONP 是处理same origin policy 的一种非常常见的方式。由于大多数 javascript 框架(例如 jquery)已经支持它,因此您无需了解技术细节即可使用它。
    您也可以通过从 javascript 构造 script 标记(如您所提到的)来自己解决问题。 Google Analytics 代码 sn-p 就是这种方法的一个示例:

          var ga = document.createElement('script');
          ga.type = 'text/javascript';
          ga.async = true;
          ga.src = 'url here';
          var s = document.getElementsByTagName('script')[0];
          s.parentNode.insertBefore(ga, s);
    

    至于 iframe 的想法(如果我理解你的话),它是行不通的。您可以在页面上使用iframe 元素来显示来自另一台服务器的内容,但浏览器不允许您使用 javascript 从主页访问它。

    编辑
    这个原始提案详细介绍了 JSONP 的用法:
    http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/

    【讨论】:

      【解决方案2】:

      您需要一个用于 x 域调用的服务器端代理。

      网上有很多可用的实现,或者您可以用您选择的语言编写一个以适应您的堆栈。

      更多关于图形和 PHP 代理的信息在这里 - http://developer.yahoo.com/javascript/howto-proxy.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 2011-04-10
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多