如何使用JavaScript加载跨域页面

时间:2015-04-14 14:10:55

标签: javascript jquery ajax load cross-domain

我的网站上有一个页面(让我们说域名A ),我想从另一个页面中提取更多内容,例如域名B 。默认情况下,出于安全原因,浏览器会阻止此功能。

据我所知,有几种方法可以做到这一点。

我的问题是:我可能会忽略其他可能更好的选择吗?

为了记录,我正在使用的网站是一个巨大的商业网站,每天都有数百万用户。

3 个答案:

答案 0 :(得分:2)

您可以执行JSONP,允许CORS并使用普通JSON,使用DIY JSONP包装器或使用JSONP代理服务。以下是详细解决方案:JSONP with remote URL does not work

在您的情况下最简单的选择是推送自己的JSONP代理服务。这是一个演示准系统PHP包装器,如果你获取一个JSON字符串,可以通过CORS。与Yahoo的YQL不同,没有任何限制,没有限制。

<?php
$callback = isset($_GET["callback"]) ? $_GET["callback"] : "?";

$json = file_get_contents('http://somedomain.com/someurl/results.json');

header('Access-Control-Allow-Origin: *');
header("Content-type: application/json");
echo $callback . "(" . $json . ");";
?>

答案 1 :(得分:0)

您是在尝试获取内容还是代码?如果您正在尝试获取内容,是否可以使用iframe?

如果你想要代码,我认为你概述的选项几乎就是你所拥有的。由于浏览器支持,JSONP可能是您最好的选择。例如,IE从版本10开始仅支持它。如果您在每天有数百万用户的网站上,我的猜测是老版本的IE上有一些人(不幸的是)。

编辑:根据内容,另一个选项是引入您自己的本地代理。例如,我已经完成了需要在其他提供程序上调用WebServiceX的事情。我在服务器端代码中调用WebServiceX并实现我自己的JavaScript访问的Web服务。这意味着我不会跨域,因为跨域访问发生在服务器端,而不是客户端。它还允许我引入缓存和其他改善性能的东西(取决于数据类型)。

答案 2 :(得分:0)

跨域数据传递的方法 - 创建JavaScript对象并从另一个域分配源。这是一个快速而又肮脏的例子:

文件test.html:

<html>
<body>
Test done
</body>
<script>
var s = document.createElement("script"); 
s.type='text/javascript';
s.src='test.js';
document.body.appendChild(s);
</script>
</html>

和test.js

abc={a:'A',b:'B',c:'C'};
alert(abc.a);

test.js可以在任何域中,函数alert()可以是任何函数。 我有更优雅的方式来附加或运行这样的方法,但这个方法已经足以掩盖这个想法了。