2012-11-13 58 views
0

我有兩個HTML文件,FirstWindow和SecondWindow。 FirstWindow具有FirstWindowJS.js作爲其腳本,而SecondWindow具有SecondWindowJS.js作爲其腳本。document.createElement在新窗口中失敗

通過FirstWindowJS.js,我打開SecondWindow.html。但是,我無法爲它創建一個元素。下面是這個問題沿着碼 -

FirstWindow.html

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>FirstWindow</title> 
</head> 
<body> 
<script type="text/javascript" src="FirstWindowJS.js"></script> 
</body> 
</html> 

SecondWindow.html

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>SecondWindow</title> 
</head> 
<body> 
<script type="text/javascript" src="SecondWindowJS.js"></script> 
</body> 
</html> 

FirstWindowJS.js

main(); 

function main() 
{ 
    var myWindow = window.open("SecondWindow.html", "My Window", 
    "resizable=0,width=700,height=600"); 

    var e = myWindow.document.createElement("currentUserElement"); 
    e.setAttribute("id", "currentUserElement"); 
    e.setAttribute("value","John"); 
} 

SecondWindowJS.js

main(); 

function main() 
{ 
    var e = document.getElementById("currentUserElement"); 
    var value = e.getAttribute("value"); 
    console.log("value = "+value); 
} 

我在SecondWindowJS.js得到的錯誤是 -

TypeError: e is null 

爲什麼是 「E」 空?什麼是錯誤?

回答

3

在開啓者的腳本繼續之前,新窗口有可能運行它的JavaScript,但更有可能你不能在尚未附加到文檔的元素上使用getElementById

myWindow.document.body.appendChild(e); 
+0

這樣做後,我仍然得到錯誤。我檢查了日誌,新窗口的腳本在第一個窗口的腳本之後運行,所以我不確定問題是什麼。 – CodeBlue

1

您創建了該元素,但看起來並不像將其添加到DOM中。除非使用parentNode.appendChild()方法明確添加元素,否則該元素不存在於DOM中。

在你的情況下,它會是這個樣子,如果你只是想添加元素在你的身體元素的最後一個元素:

function main() 
{ 
    var myWindow = window.open("SecondWindow.html", "My Window", 
    "resizable=0,width=700,height=600"); 

    var e = myWindow.document.createElement("currentUserElement"); 
    e.setAttribute("id", "currentUserElement"); 
    e.setAttribute("value","John"); 
    // The element doesn't exist in the DOM until you explicitly add it 
    myWindow.document.body.appendChild(e); 
} 
+0

'myWindow.document.getElementsByTagName(「body」)[0]'可以替換爲'myWindow.document.body'。 – David

+0

@David謝謝你,更新我的例子。 –

+0

與上面的評論相同,在完成此操作後,我仍然收到錯誤消息。我檢查了日誌,新窗口的腳本在第一個窗口的腳本之後運行,所以我不確定問題是什麼。 – CodeBlue