如何让jQuery ajax调用从greasemonkey页面事件中工作

我有一个GM脚本,它在页面上插入一个链接,然后在点击它时添加一个事件监听器。

然后,它运行一个函数,其中包含一些jQuery.get调用。 然而,除非我使用jQuery的unsafeWindow版本,否则这些调用似乎不会触发。

function runMyFunc() { console.log('myFunc is called'); $.get('index.php',function () { console.log('jQuery.get worked'); }); } $("#someHook").before('Link'); $('#myLink').click(runMyFunc); 

以上将输出’myFunc被调用’到控制台,但不会对.get做任何事情

我正在使用来自http://code.jquery.com/jquery.js的 FF17和GM1.5,jquery

有没有比使用unsafeWindow更好的工作方式? 我在GM 1.0之前有这个工作并且有很多$ .get我需要在脚本中更改,而不是所有这些都是从同一场景运行的

你的代码对我来说很好。 为什么/你怎么认为$.get不起作用?

请记住,如果使用index.php存在服务器错误(404等),您将永远不会看到'jQuery.get worked'消息。 您是否检查过Firebug Net面板或Wireshark等,以查看是否进行了AJAX调用?

无论如何,如果你安装这个Greasemonkey脚本,你可以看到代码工作,加上一些error handling:

 // ==UserScript== // @name _delme9h762 // @include http://YOUR_SERVER.COM/YOUR_PATH/* // @include http://fiddle.jshell.net/ZqhRH/* // @require http://code.jquery.com/jquery.js // @grant GM_addStyle // ==/UserScript== /*- The @grant directive is needed to work around a design change introduced in GM 1.0. It restores the sandbox. */ function runMyFunc() { console.log('myFunc is called'); $.get('index.php', function () { console.log ('jQuery.get worked'); } ) .error ( function (respObj) { console.log ("Error! ", respObj.status, respObj.statusText); } ) .complete ( function (respObj) { console.log ("AJAX Complete. Status: ", respObj.status); } ) ; } $("#someHook").before('Link'); $('#myLink').click(runMyFunc); 

然后访问fiddle.jshell.net/ZqhRH/1/show/

注意,控制台将显示:

myFunc被调用
错误! 404未找到
AJAX完成。 状态:404

在jsFiddle网站上,因为index.php在那里不存在,但$.get()在其他方面完美运行。