如何让 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('<a id="myLink">Link</a>');
$('#myLink').click(runMyFunc);

以上将输出"myFunc is called"到控制台,但不会对 .get 执行任何操作

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

有没有比使用 unsafeWindow 更好的方法来让它工作?我在 GM 1.0 之前就已经工作了,并且有很多 $.get 我需要在我的脚本中更改它们,并非所有这些脚本都是从同一场景运行的

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

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

无论如何,如果您安装此 Greasemonkey 脚本,您可以看到该代码正常工作,以及一些错误处理:

// ==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('<a id="myLink">Link</a>');
$('#myLink').click(runMyFunc);


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

请注意,控制台将显示:

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

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

最新更新