如何让Ajax使用Bookmarklet并绕过Javascript同源策略?

时间:2011-06-29 08:50:38

标签: javascript ajax xmlhttprequest bookmarklet

我正在尝试编写一个Bookmarklet,其目标是能够在停留在网站X上时,从任何网站X(点击书签时所在的原始页面)向我网站的服务器提交信息。

理想情况下,我可以发回一个回复并让它弹出某个地方,但这不是必需的。

我一直在遇到相同原始策略的问题 - 从站点X开始,XMLHttpRequests只能通过站点X的域启动。

有没有人知道解决这个问题的方法(或者他们可以指导我的教程)?一些带有Bookmarklet的Ajax?

非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以使用JSONP执行跨域ajax请求(使用GET发送并以JSON格式接收数据)。

答案 1 :(得分:2)

您加载的书签可以从主机页面将数据POST到服务器。这很奇怪,但只有Javascript受同源政策的限制 对另一台服务器进行GETPOST调用可以正常工作。

小书签可以在主页中注入一个隐藏的IFRAME,其src属性为http://yourdomain.com/listen

然后使用属性FORM构建target,指向IFRAME
最后将表单提交给POST数据。

令人遗憾的是,SOP不会让你直接读取POST的响应,因为它发生在IFRAME中并且有另一个域而不是主页。

但是,如果您需要对请求的反馈,您的书签可以使用setInterval每隔X毫秒轮询一次,并使用JSONP询问请求的状态。

调用类似的东西:
http://yourdomain.com/get-post-status?id=2234234&callback=showResult