为什么在Greasemonkey示例中为此jQuery触发alert()但不触发console.log()?

时间:2012-04-30 01:18:31

标签: javascript jquery firefox console firebug

对于此测试Greasemonkey UserScript,警报会弹出,但没有任何内容记录到Firebug控制台 这是使用Greasemonkey 0.9.18和Firefox 12.0中的Firebug 1.9.1。

// ==UserScript==
// @name           test
// @namespace      tester12354
// @include        *
// @require        http://code.jquery.com/jquery-latest.min.js
// ==/UserScript==

(function($) {
    $.fn.tester1 = function(test) {
        alert(test);
        console.log(test);
    }
}(jQuery));


$.extend({
    tester2: function(test) {
        alert(test);
        console.log(test);
    }
});

alert($().jquery)
console.log($().jquery) 

$().tester1('from tester1');
$.tester2('from tester2');

2 个答案:

答案 0 :(得分:2)

正如在GreaseMonkey manual中解释的那样,在GreaseMonkey脚本中,脚本的全局上下文不是浏览器的真实窗口对象(与在页面上执行的实际脚本不同),而是窗口的虚拟版本具有相同API的对象。

console对象是真实窗口上的全局变量,因此无法从GreaseMonkey(或至少从GreaseMonkey上的jQuery)访问。

有关GreaseMonkey下console的内容以及如何从GreaseMonkey记录消息的说明,请参阅此页。

答案 1 :(得分:1)

如果网页本身没有<script>个标签,那可能是因为stupid way in which Firebug injects the console object