2012-01-21 22 views
0

是否有跨瀏覽器的方式將onload事件與靜態腳本標記關聯在一個html文檔中?靜態腳本標記中的跨瀏覽器onload事件

下不會在IE 7和IE 8的工作:

<script onload="DoThat" type="text/javascript" src="..."></script> 

一些背景

我已經找到一種方法與動態腳本標記和if語句來做到這一點。例如在this MSDN article中解釋。

我的問題是,我需要找到當前的腳本標記,因爲我正在構建在原地插入DOM元素的小部件。在過去的I have found some workarounds to do this,但他們都有其不利因素。我希望在腳本onload事件上使用「this」關鍵字會有所幫助。

+0

所以你需要'onload'能夠使用'this',以指代當前腳本元素? – dfsq

+0

對,這就是爲什麼我在我的問題中添加了一些上下文。如果我可以在不加載的情況下將「this」指向當前腳本,我也會很高興。正如您從鏈接中看到的那樣,我已經探索了一些替代方案。 – Christophe

回答

3

據我所知,你需要你的代碼來知道它屬於哪個腳本元素。然後,您將在此腳本旁邊插入必要的HTML小部件內容,或者附加到腳本父級等。如果是這樣,那麼我會爲您提供另一種方法。

裏面你部件JavaScript文件放置下一行代碼:

var scripts = document.getElementsByTagName('script'), 
    thisScript = scripts[scripts.length - 1]; 

thisScript是你正在尋找,當前腳本元素的代碼位於的DOM元素。很簡單。

它爲什麼有效。 詳細說明http://feather.elektrum.org/book/src.html。只是一個摘要:

當帶有src的腳本加載到頁面中時,頁面的其餘部分尚未寫入。這意味着無論頁面包含多少個腳本,當前開始執行的腳本都是最後一個腳本

這是相當簡單和有效的技術,但並不是很多人知道這種可能性。它的可靠性和100%的瀏覽器兼容。順便說一句,谷歌使用此代碼來呈現+1按鈕:

<script type="text/javascript" src="https://apis.google.com/js/plusone.js"> 
    {lang: 'dk'} 
</script> 

那麼如何看待api腳本如何獲得這個散列參數呢?在我的例子中,它將是thisScript.innerHTML

+0

如果你按照我的問題中的鏈接,你會看到這是一個替代方案。斷言「當頁面中加載了src腳本,頁面的其餘部分尚未寫入」對於延遲腳本或異步腳本是不正確的。 – Christophe

+1

是的,絕對如果你有延期加載,那麼這是不適合的。無論如何,這是IE7的絕佳選擇。 – dfsq

0

我不知道我是否抓住了您的需求。
反正來定位當前的腳本,你可以嘗試這個例子

<script src="jquery-1.7.1.min.js" varTest="valueTest" id="myID"></script> 
<script> 

var scripts = document.getElementsByTagName('script');  
var pattern = 'jquery-1.7.1.min.js'; 
var i = undefined; 

for (var x=0; x<scripts.length; x++) 
{ 
    if (scripts[x].src.match(pattern)) { i = x; break; } 
} 

if (typeof(i) != 'undefined') 
{ 
    // Do any association needed here 
    var current_script = scripts[i]; 
    // Just for test    
    console.log(current_script.attributes); 
} 

</script> 
+0

這個答案非常有意義。但正如我所提到的,我的問題是我有一個小部件方法,用戶可以選擇多次插入相同的小部件。然後多個腳本將具有相同的「模式」。 – Christophe