diigolet 小书签如何解决跨脚本问题?
http://www.diigo.com/tools/diigolet
Diigolet 本质上允许您使用书签为网站添加书签。对于我正在制作的小书签,我还需要将用户所在网站的当前 URL 传递到我的服务器。每次我尝试这样做时,都会出现跨脚本错误。
有人知道如何像 diigolet 一样绕过这个吗?
http://www.diigo.com/tools/diigolet
Diigolet essentially allows you to use a bookmarklet to bookmark sites. With the bookmarklet I'm making, I also need to pass the current URL of the site the user is on to my server. Everytime I try this, I get a cross-scripting error.
Does anybody know how to bypass this like the diigolet?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
本质上,它们通过注入脚本标记来解决同源策略使用不同域的 URL 而不是使用 XMLHttpRequest。请注意,这与普通的 JSON 请求不同,因为 JSON 被包装在回调函数中,例如:(
这是有效的,因为 JSON 是 JavaScript 对象文字表示法的子集。)
在他们的情况下,他们对回调的名称进行硬编码函数为
diigolet.callback
,但存在一个名为 JSONP JavaScript 库例如 jQuery 支持。在 JSONP 规范下,回调函数的名称通过 GET 请求中的
callback=myCallbackFunction
参数传递到服务器。您的服务器端代码需要适当地处理这个问题,以便能够处理来自 jQuery 的 JSONP 请求。Essentially, they work around the same-origin policy by injecting a script tag with the different-domain URL rather than using an XMLHttpRequest. Note that this is different from a normal JSON request in that the JSON is wrapped in a callback function, for example:
(This works because JSON is a subset of JavaScript's object literal notation.)
In their case, they hardcode the name of the callback function as
diigolet.callback
, but there exists a specification called JSONP that JavaScript libraries such as jQuery support.Under the JSONP specification, the name of the callback function is passed to the server via a
callback=myCallbackFunction
parameter in the GET request. Your server-side code needs to handle this appropriately to be able to handle JSONP requests from jQuery.