我正在尝试编写一个Bookmarklet,其目标是能够在停留在网站X上时,从任何网站X(点击书签时所在的原始页面)向我网站的服务器提交信息。
理想情况下,我可以发回一个回复并让它弹出某个地方,但这不是必需的。
我一直在遇到相同原始策略的问题 - 从站点X开始,XMLHttpRequests只能通过站点X的域启动。
有没有人知道解决这个问题的方法(或者他们可以指导我的教程)?一些带有Bookmarklet的Ajax?
非常感谢!
答案 0 :(得分:3)
您可以使用JSONP执行跨域ajax请求(使用GET发送并以JSON格式接收数据)。
答案 1 :(得分:2)
您加载的书签可以从主机页面将数据POST到服务器。这很奇怪,但只有Javascript受同源政策的限制
对另一台服务器进行GET
或POST
调用可以正常工作。
小书签可以在主页中注入一个隐藏的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