在Greasemonkey脚本中检查$会抛出'$ is not defined'并且脚本停止:为什么?

时间:2014-02-15 20:08:23

标签: javascript jquery greasemonkey

我正在为已经使用jQuery的页面编写脚本,所以我希望该库已经存在并加载了。 但是当我检查$定义时,虽然我认为它是假的,但是我得到一个'$ is not defined'错误(在浏览器控制台上 - Firefox Ctrl-Shift-J)并且脚本停止了:

if ($) {
    GM_log('jQuery through \'$\': ' + $.fn.jquery);
}
GM_log('end');

为什么我会这样做?为什么if语句不会像在false元素中那样评估为<script>

Greasemonkey版本:1.15

1 个答案:

答案 0 :(得分:3)

Javascript不喜欢您尝试访问不存在的内容。你应该告诉它在哪里试试看:

if( window.$) {
    // do something
}

在这种情况下,它将查找window对象,然后查找该对象上的$属性,并返回undefined,安全知道至少它在查看正确的地方。

但是请注意,window.$不是检测jQuery的可靠方法 - 如果你在我的网站上运行它,你会得到“无法访问未定义的属性'jquery',因为$被定义为“在</body>”函数之前执行的“队列”。