的!getJSON内的油猴子的用户脚本
-
22-07-2019 - |
题
我尝试写一个脚本用户,使得一个跨领域的AJAX请求。
我已经包括jQuery在我的脚本中使用@需要和一切似乎都是工作的罚款,直到这一点,我尝试运行!getJSON.
API我访问支持他,但是我继续收到错误指出jsonp123456789没有定义。
从什么我已经能够收集这是由于jQuery写的响应他直接进入头部的网页,然后成为沙盒.一旦发生jQuery不能再取回调得到在它被定义。(我不是100%在这种情况下,但它似乎对我)。
是否有任何方法来解决这个吗?它已经建议,我宣布回呼功能内部unsafeWindow但我不能确定如何做到这一点并没有得到它的工作。
解决方案
那岂不是很好,如果使用jQuery的内部GM_xmlhttpRequest
,让你可以拥有的jQuery方法的所有便利和Greasemonkey的的跨站点的功能?作为mahemoff指出,Greasemonkey的可以让你做出的要求,而不依赖于JSONP和运行到你面临回调的问题,但你必须要处理的JSON内容自己。
我们已经写了一个库,将做到这一点:在的的Greasemonkey / jQuery的XHR桥。如果您@require
该脚本在userscript,那么所有$.get
和$.getJSON
和$.post
等jQuery的调用将工作跨站点,而不依赖于像JSONP技术。
因此,如果您使用此桥,并简单地从你的URL删除?callback=?
,jQuery代码应该工作而无需修改。 此博客帖子提供了一个一步一步的演练。如果任何人有任何疑问,意见,报告bug或建议对桥梁插件,请让我知道。
其他提示
在解决方法是使用GM_HttpRequest。你可以逃脱它,而不是JSONP跨域请求,因为不像平时XHR,GM_HttpRequest确实允许跨域调用。你想是这样的:
GM_xmlhttpRequest({
method: "GET",
url: "http://example.com/path/to/json",
onload: function(xhr) {
var data = eval("(" + xhr.responseText + ")");
// use data ...
}
});
请注意,这EVAL的JSON最简单的方法。如果你想为不可信JSON一个更安全的解决方案,你需要包括小JSON-解析库
不幸的是,还必须环绕一个表面上无用的零持续时间的setTimeout 整件事。我发现它最简单的粘GM_xmlhttpRequest在其自己的方法,然后运行的setTimeout(MakeCall函数,0);
您可以在这里看到真实的例子。
正如你们许多人将会知道,谷歌铬不支持任何方便的GM_职能的时刻。
为此,它是 不可能的 要做到的交叉网站的AJAX请求由于种种sandbox限制(即使用伟大的工具一样 詹姆斯Padolsey的交叉领域要求的脚本)
我需要一种方法,为用户要知道当我的油猴子的脚本经更新,在铬(因为铬不能做,要么...).我想出了一个解决方案,这是有记录的在这里(和在使用我的 灯塔++ 脚本),值得一读的那些你想要的版本检查你的脚本:
http://blog.bandit.co.nz/post/1048347342/version-check-chrome-greasemonkey-script