2014-03-02 103 views
0

我不明白js的一件事情。如果我有我的.js文件和HTML我有以下代碼:頁面加載時外部文件中的JavaScript未運行

<head> 
    <script src="skrypt.js"></script> 
</head> 

<body> 
    Content 
</body> 

這是否意味着第一執行過程中我skrypt.js將被執行?

,因爲當我在我的skrypt.js代碼:

document.write("HelloWorld") 

輸出是 「HelloWorld」 的,但是當我在skrypt.js:

var canvas = document.getElementById("canvas"); 
    var context = canvas.getContext("2d"); 

    context.fillStyle = "red"; 
    context.fillRect(0, 0, 300, 300); 

頁是空白的,我必須使用事件:

<body onload="drawCanvas();"> 
</body> 

其中drawCanvas()與外部.js文件具有相同的代碼。

那麼爲什麼document.write正在工作,而畫布不是?

+0

可能重複[如何在頁面加載完成後執行JavaScript函數?](http://stackoverflow.com/questions/3261969/how-can-i-execute-a-javascript-function-after-頁面加載完成) – isherwood

+0

它不是一個問題如何在加載完成時執行代碼,但關於爲什麼某些代碼被執行而有些差別 – Radek

回答

0

加載到頭部的JavaScript文件在DOM準備好之前進行處理。您需要將函數封裝在window.onload中,在頁面加載後將其稱爲其他地方,或者將外部文件調用放在頁面文檔的底部,就在關閉正文標記之前。

+0

而不是使用'document.write' – Kroltan

+0

這可能只是一個測試語句。 – isherwood

+0

仍然不明白爲什麼執行document.write(「text」)但canvas不是 – Radek