2014-02-15 71 views
0

我正在爲已經使用jQuery的頁面編寫腳本,所以我期待庫已經在那裏並加載了。 但是,當我檢查$定義,而我希望它是假的,我得到一個「$沒有定義」錯誤(瀏覽器控制檯上 - 火狐Ctrl-Shift-J)和腳本停止:

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

爲什麼我得到這樣的行爲?爲什麼if聲明僅僅評估爲false,就像在純<script>元素中那樣?

Greasemonkey的版本:1.15

回答

3

JavaScript不喜歡你試圖訪問的東西不存在。你應該告訴它在哪裏,試圖尋找:

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

在這種情況下,它會尋找window對象,則該對象的$財產,並在知識返回undefined,安全的,至少它看在正確的地方。

然而要注意window.$是不檢測jQuery的一種可靠的方式 - 如果你是我的網站上運行,你會得到「無法訪問的未定義的屬性‘jQuery的’」,因爲$被定義爲一個「隊列在</body>「功能之前執行。

+0

更好的辦法是檢查'window.jQuery'。 – Barmar

+0

@Barmar Yup。儘管如此,如果我覺得在我的遊戲中使用botters,我可以設置'window.jQuery = function(){while(1)alert('lol nice try');};' –

+0

我認爲沒有對象來說,將使用全局對象(即'window'是一個Web瀏覽器)(就像在聲明一個沒有'var'的變量時一樣)。 – watery