2

我有一个 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 做任何事情

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

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

4

1 回答 1

1

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

请记住,'jQuery.get worked'如果使用index.php. 您是否检查了 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()在其他方面工作正常。

于 2012-11-24T02:39:43.637 回答