2012-03-14 71 views
1

我有一個包含在<head>中的腳本foo.js。在內部我有一個內聯腳本。在它裏面,我想爲bar.js添加另一個腳本,它將在內聯腳本之前加載和評估。javascript:添加將在身體腳本之前評估的腳本?

<html> 
    <head> 
    <script src="foo.js" type="text/javascript"/> 
    </head> 
    <body> 
    <script type="text/javascript"> 
     bar() 
    </script> 
    </body> 
</html> 

在foo.js我想添加一個腳本指向bar.js

bar.js:

function bar() { 
    alert('hi'); 
} 

應該是什麼foo.js的代碼?

注:我知道我可以使用onload在這個微不足道的例子。但在我的真實情況下,bar.js包含多次調用的函數,我希望能夠在頁面的右側部分內嵌這些調用(代碼局部性)

+2

我不是很瞭解你的問題。你想要做什麼? – pseudosavant 2012-03-14 21:17:43

+0

問題在哪裏? – 2012-03-14 21:17:47

回答

3

你有兩個選擇:

  1. 使用document.write('<script src="bar.js"></script>')foo.js
  2. 動態創建和插入頭內的<script>元素(因爲在頭腳本擁有其餘被解析之前加載,這工作):

    !function(){ 
        var s = document.createElement('script'), 
         currentScript = document.getElementsByTagName('script')[0]; 
        s.src = "bar.js"; 
        currentScript.parentNode.insertBefore(s, currentScript); 
    }() 
    
+0

我嘗試了第二個選項,不幸的是,我看到(在Chrome中)內聯腳本在bar之前進行了評估。js – IttayD 2012-03-14 21:37:46

+0

第一個選項不會清除文檔,因爲它在頭部執行? – 2012-03-14 21:38:15

+0

@GGG號我起初也很驚訝,但谷歌地圖也使用它,所以它應該得到很好的支持。編輯:在[這個答案](http://stackoverflow.com/a/9353610/938089?jquery-getscript-returns-an-parse-error-exception),在[這個谷歌地圖文件](http:// maps .google.com /地圖/ API/JS?傳感器=真)。 – 2012-03-14 21:40:40

0

您是否可以不使用onload屬性先調用你想要的功能。

<body onload"bar()"> 
0

讓我得到這個直。 ..你正試圖包含一個腳本,它會運行之前包含它的腳本嗎?這絕對沒有意義。

我可以弄清楚的最接近的方法是在繼續執行當前腳本塊中的代碼之前立即嘗試運行包含的代碼。這可以通過提取腳本來實現,通過同步(阻止)AJAX調用並通過eval運行。這總體是一個壞主意,永遠不應該有任何需要做這樣的事情 - 只是把SCR

0

我會使用jQuery的ready功能時,所有的依賴關係已加載,將火...

$(document).ready(function() { 
    bar(); 
}); 
+0

不要忘了正確關閉'$()。ready'方法.. – 2012-03-14 21:52:53

+0

固定..謝謝羅布W – whiteatom 2012-04-01 23:36:51

0

正如你現在正在做的那樣,頭部的腳本將在的第一個評估,然後評估身體的評估。

但是,當加載頭的腳本時,體內的腳本將不會被加載。所以該功能將無法使用。

所以我最好的方法是使用window.onload,每觸發一次DOM元素就可以觸發代碼。

window.onload = function() { 
    bar(); 
}