我有一个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()
在其他方面运行良好。