0

我有两个 HTML 文件,FirstWindow 和 SecondWindow。FirstWindow 将 FirstWindowJS.js 作为其脚本,而 SecondWindow 将 SecondWindowJS.js 作为其脚本。

通过 FirstWindowJS.js,我打开 SecondWindow.html。但是,我无法为其创建元素。这是代码以及问题 -

第一窗口.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”为空?错误是什么?

4

2 回答 2

3

新窗口可能会在打开器的脚本继续之前运行其 JavaScript,但您更有可能无法getElementById在尚未附加到文档的元素上使用它。

myWindow.document.body.appendChild(e);
于 2012-11-13T21:31:55.067 回答
1

您创建了元素,但看起来并没有将其添加到 DOM。在您使用parentNode .appendChild()方法显式添加元素之前,DOM 中不存在元素。

在您的情况下,如果您只想将元素添加为 body-element 中的最后一个元素,它看起来像这样:

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);
}
于 2012-11-13T21:32:28.940 回答