2

ウィンドウが子ウィンドウを開くとき

    var someVar = "someValue";
    newWin = window.open("somepage.html","","");

子ウィンドウは親のグローバル変数にアクセスできます

    var x = window.opener.someVar;
    alert(x);

これは、Firefox 18、IE6、IE7、Opera 11.52、Safari 5.1.1 では正常に動作します (子アラート "someValue")。

うわぁ!他の誰かがこれを経験していますか?回避策はありますか?


以前は、どちらの方向からでもグローバル変数にアクセスでき、もう一方のウィンドウでも関数を実行できました。この機能がなくなるのは嫌です。デイブ

4

2 に答える 2

2

それはまだ私のために働いているようです。このサイトでは、Chrome のコンソールのこのページでこれを試してみてください。

 this.test = "hello"
 window.open(window.location.href) //opens the same page

(ポップアップが許可されていることを確認する必要があるため、2 回行う必要がある場合があります)。次に、ポップアップのコンソールで:

 console.log(window.opener.test)

「こんにちは」が表示されます。

そうは言っても、クロスドメイン アクセスに関しては、特にローカルでサイトを開発している場合 (たとえば、file:// を使用してファイル システムを介して直接 html ファイルにアクセスしている場合)、Chrome が最も厳しいことに気付きました。私は Chrome で開発するのが好きで、ローカルで開発している場合は、ページを提供するためにある種の Web サーバーを実行する必要がありますが、Firefox ではファイル システムを介してページに直接アクセスでき、XSS の問題について文句を言うことはありません。

于 2013-02-17T04:11:39.147 に答える
0

みんなありがとう、

はい、file:// を実行しています。サーバーにアップロードしたところ、正常に動作します。さらに、親ウィンドウでは、子で関数を実行できます。双方向のすべてがサーバー上で正常に機能するように見えます。

これが私のシナリオです。Windows プログラム BeerSmith2 ( Beer Homebrewing プログラム)のアドオンを開発しています。この Windows アプリは、小型の「キャプティブ」ブラウザー (コンピューター上の IE) を使用して、Windows アプリからの「レポート」を表示します。私のアドオンは、アプリケーションの小さなキャプティブ ブラウザーからフルスクリーン ブラウザー (同じ IE) に分割し、多数の変数をキャプティブからフルスクリーンに渡す必要があります。

したがって、サーバーは関与せず、実際には IE をサポートするだけで済みますが、将来、アドオンが Mac バージョンの BeerSmith2 でも動作するように、IE をクロス ブラウザーに維持しようとしています。私は Firefox で開発し、IE6 で動作するようにします (IE6 で動作する場合は、何でも動作します)。次に、IE-later/Opera/Safari/Chrome で最終的な微調整を行いますが、通常は小さな問題しかありません。

最新の Chrome でプログラム全体 (数千行の JS コード) が完全に失敗したときの私の恐怖を想像してみてください。サーバーがないので、Ajax を実行できません。また、これを行う他の方法も考えられません。だから私は立ち往生していると思います。Safafi が追随しないことを願っています。

IE には、file:// で JS を実行することに関する厄介なポップアップ警告がありますが、これをオフにすることができます。Chrome は、このウィンドウ間での変数の受け渡しに黙って失敗するだけであり、選択肢がないと思います。うわー、マイクロソフトは実際に正しい方法で何かをしました!

ご協力いただきありがとうございます。デイブ

于 2013-02-17T14:11:06.067 に答える