2012-03-01 41 views
0

我知道我可以在用戶通過創建腳本元素並通過document.appendChild將其注入到頁面上來單擊元素時注入腳本。但是,腳本正在監聽onload和onDOMContentReady(或他們自己的本地domReady事件,不確定)。用戶單擊元素時加載第三方JavaScript

如果我只在用戶單擊元素時注入腳本,onload/onDOMContentReady的回調將永遠不會觸發,因爲這些事件已經通過。

任何想法?此第三方腳本引入了所有這些其他請求,並且不適合頁面加載。

回答

0

編輯:我再次閱讀問題......如果你正在使用像jQuery,它會激發你的處理函數,即使文件準備已經被髮射的任何其他文件準備好電話。它將立即執行該功能。如果您正在尋找一種純JavaScript方式來執行此操作,則需要額外考慮檢查dom ready是否已被解僱,並自行解僱您的功能,否則將其附加到dom ready回調。

我不認爲只有做這樣的事情(使用jQuery爲了簡潔)一個問題:

// on document ready 
$(function() { 

    // attach the click handler 
    $('#loadScript').click(function(e) { 

     // on click, get the script 
     $.getScript('path/to/your/script.js', function() { 

      // your script is loaded, so what you need from here 
      // to handle this click event. 
     }); 
    }); 
}); 

我認爲你是在想這一點。你只需要擔心一旦dom元素準備好就可以加載腳本。你也可以使用類似require.js的東西。

+0

但是,這是事情 - 我不想加載它在DOM準備好。我只希望在用戶啓動對元素的點擊時加載它。但是,第三方腳本具有負載回調,domcontentloaded,這將已經發生。我也試過你的建議,但它沒有奏效。我能拿到劇本並注入它只是罰款,但它不執行任何是window.load或domcontent加載回調。 – ant 2012-03-01 23:00:04

+0

什麼是這個腳本,我需要看看這一點真正幫助進一步。我想你可能會嘗試重新開始這些事件... – sic1 2012-03-01 23:23:19

+0

它來自第三方,縮小和混淆,所以我認爲這不會有幫助。重新啓動這些事件將是一個選項,所以我想我的問題是 - 我如何派發onload或domready事件?我知道如何發送MouseEvents。它會是一樣的嗎? – ant 2012-03-01 23:52:09