0

FirstWindow と SecondWindow の 2 つの HTML ファイルがあります。FirstWindow にはスクリプトとして FirstWindowJS.js があり、SecondWindow にはスクリプトとして SecondWindowJS.js があります。

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" は null なのですか? 間違いは何ですか?

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 に答える