2

JavaScript で新しいウィンドウを開き、オープナー ウィンドウからいくつかのデータを表示したいと考えています。私が読んだものに基づいて、私はこれを作りました:

MainWindow.html

<html>

<head>
<script>
function OpenNewWindow()
{
    this.MainWindowData = 123123;
    document.write(this.MainWindowData);

    var wnd = window.open("NewWindow.html");
    wnd.NewWindowData = 787878;
}
</script>
</head>

<body>
<input type="button" value="Open Window" onclick="OpenNewWindow()">
</body>

</html>

NewWindow.html:

<html>

<head>
<script>
function ShowData()
{
    document.write("NewWindowData: " + this.NewWindowData + "<br />");
    document.write("MainWindowData: " + window.opener.MainWindowData);
}
</script>
</head>

<body>
<input type="button" value="Show Data" onclick="ShowData()">
</body>

</html>


問題は、両方の変数が未定義のままであることです。
事前に助けてくれてありがとう。

4

4 に答える 4

0

あなたの試みは実際にはかなり近いですが、使用するthis.と問題が発生する可能性があります。

親ウィンドウで、次を使用します。

var newWindowVariable = 'Something';

新しいウィンドウで、次を使用します。

var myVariable = window.opener.newWindowVariable;

これはおそらく、あなたがしようとしていることを達成するための最も簡単な方法です。

于 2013-05-10T13:22:37.883 に答える
0

LocalStorage を使用します。

 /* Page A */
  window.localStorage.setItem("NewWindowData ", "787878");

  /* Page B */
  var stringValue = window.localStorage.getItem("NewWindowData");

次に、intに変換するか、キャストしたいものに変換できます。

于 2013-05-10T13:25:26.817 に答える
0

問題は、作成している変数ではなく、document.write最初のレンダリング中以外はいつでも呼び出したときにウィンドウのコンテンツを一掃し、作成した後に作成している変数を一掃することです。したがって、最初のレンダリング後には使用したくありません。

document.write呼び出しを (say) に変更するdocument.getElementById('someid').innerHTML = ...;か、 を使用するdocument.createElementと、より成功する結果が得られます。

これがあなたのページで、document.writeusingdocument.createElementに変更しただけで機能します。

メイン ウィンドウ:ライブ コピー| ソース

<html>
<head>
<script>
function OpenNewWindow()
{
    this.MainWindowData = 123123;

    var wnd = window.open("http://jsbin.com/uvocos/1");
    wnd.NewWindowData = 787878;
}
</script>
</head>

<body>
<input type="button" value="Open Window" onclick="OpenNewWindow()">
</body>

</html>

ポップアップ ウィンドウ: ライブ コピー| ソース

<html>
<head>
<script>
function ShowData()
{
    display("NewWindowData: " + this.NewWindowData);
    display("MainWindowData: " + window.opener.MainWindowData);
}

function display(msg) {
    var p = document.createElement('p');
    p.innerHTML = String(msg);
    document.body.appendChild(p)
}
</script>
</head>

<body>
<input type="button" value="Show Data" onclick="ShowData()">
</body>

</html>

これcreateElementdisplay、ポップアップに追加した関数にあります。

個別に:変数を作成するのwindowではなく、おそらく使用します。実際は関数を呼び出す方法になるため、機能しますが、機能しない関数を呼び出す他の方法があり、would を使用します。thisthis windowwindow.foo = ...;

最後に:変数を開いた直後にポップアップに変数を配置すること(あなたのNewWindowData)が確実に機能するかどうかはわかりませんが、上記では(私にとっては)そうです。通常、それではなく、ポップアップにオープナー(MainWindowData変数)からデータをプルさせたり、クエリ文字列を介してデータをポップアップに渡したりします。

于 2013-05-10T13:19:02.663 に答える