2012-09-30 131 views
0

我正在使用Google Chrome用戶腳本,它增強了通過Modernizr's .load() method加載jQuery的站點。等待Modernizr從用戶腳本加載jQuery

我將使用該網站的jQuery實例,但在加載jQuery之前,userscript開始執行。

有沒有一種確定性的方法來從Greasemonkey腳本或userscript中攔截Modernizr的load()/complete機制?

或正在查詢window[jQuery]/'$' in window等唯一的解決方案?

(我試圖避免加載我自己的jQuery的實例,並使用輪詢有時候我會想念到文檔我想用mutation observers攔截第一變化。)

回答

0

林不知道什麼ü試圖做的,但下面的腳本可能會幫助你。它會推遲HTML頁面內的任何內聯腳本,並在所有腳本被返回時載入modernizr後執行。

在modernizr加載函數之前定義下面的行。

docready=[],$=function(){return{ready:function(fn){docready.push(fn)}}}, 

下面寫劇本上的Modernizr負載完全

$ = jQuery; 
jQuery(document).ready(function() { 
    for(n in docready) docready[n](); 
}); 
+0

如何在用戶腳本中「在modernizr加載函數之前定義行」?所有modernizr代碼都在第三方網站上,其代碼我無法修改。也許我只是誤解了一些東西。 – hippietrail

+0

就在加載modernizr腳本之前,在您的腳本中。 – wajatimur

+0

也許我沒有說清楚,我沒有在我的用戶腳本中加載modernizr,第三方網站通過其'​​'中的傳統'

0

這聽起來像你需要等待的window.onload,當一切都已經加載的時候觸發。

文檔結束和文檔空閒都保證在整個DOM被分析後運行,這是開發人員感興趣的常見事情。如果由於某種原因,您確實需要在window.onload之後運行腳本,則可以檢查document.readystate屬性。如果它是「完整的」,那麼你可以假設已經發生了負載。如果不是,那麼你可以聽取onload。

+0

我有一種感覺,那就是該網站只有在加載jQuery後纔開始加載,但我會回去查看。謝謝... – hippietrail

+0

我真的很好奇,這是怎麼解決你的? – Metagrapher

+0

不幸的是,我現在只能獲得互聯網連接,此刻我還沒有回到這個位置,我的代碼仍然使用到目前爲止工作的輪詢,但它的不確定性仍然讓我感到不安。 – hippietrail