我尝试写一个脚本用户,使得一个跨领域的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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top