我正在尝试在我的博客系统中编写一个实用程序作为帖子。限制是我无法运行任何服务器端代码。我只能运行客户端(JavaScript)代码。我想向外部域发送请求并解析该结果。
例如,根据人们如何使用我的实用程序,我希望能够获取http://example.com/getPage.html?page=A等页面的HTML,其中可能包含:
<html>
...
<body>
...
<table id="targetTable">
<tr><td>Some Data</td></tr>
<tr><td>Some Data</td></tr>
<tr><td>Some Data</td></tr>
</table>
...我将存储在JavaScript字符串中,然后查询以查找我想要的数据。
我想使用客户端代码从外部域(即我的脚本未在http://example.com上运行,也不与http://example.com关联)查询此页面。
我正在使用jQuery和it says jQuery.get()
方法由于same origin policy而无效。有什么方法可以做我想要的其他方式吗?例如,加载iframe然后以某种方式读取其html属性?
答案 0 :(得分:1)
答案 1 :(得分:0)
我担心这是不可能的。你可以使用一个名为jsonp的约定解决它,但是它只能检索json对象(即使那些当然可以包含html-strings)。但是,如果服务器内置了对它的支持,服务器只能响应jsonp请求。
您的问题最直接的解决方法是创建一个获取html页面并返回json数据的小型服务器。然后你可以将ajax调用发送到该服务器(如:http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA),让它从example.com获取数据并将其作为json返回到客户端脚本。
只是为了加强我的论点,一篇引自jQuery AJAX页面的文章:
由于浏览器安全限制, 大多数“Ajax”请求都受制于 同源政策;请求 无法成功检索数据 来自不同的域,子域或 协议。
脚本和JSONP请求 不受同一来源的影响 政策限制。
答案 2 :(得分:0)
您可以从其他域加载iframe
或对另一个域进行POST
次调用。
幸运的是,为了我们的安全,但不幸的是,由于同源策略,您无法使用Javascript阅读任何内容。
如果您无法从其他域获得任何合作。例如:启用JSONP或window.postMessage
,那么您唯一的解决方案是使用Web服务器作为代理。
提供您的网页的服务器或免费(如果您的流量不是很大)的实验室,例如Google App Engine,您可以随时使用。
您可以使用通用服务在ajax,JSONP或iframe + window.postMessage
中调用此服务器,该服务将获取页面内容并将其提供给浏览器。