• 締切済み

openerの関係が崩れてしまった場合の関数呼び出し

javascript の関数の呼び出し方法について質問です。 A.htmlからwindow.open で開かれたB.htmlがあります。 A.htmlにある test() という関数を呼び出したいい場合、 window.opener.document.test(); となると思いますが、 B.htmlを開いている状態で、A.html上に違うページを開いたとき、 openerの関係が崩れてしまうためか、B.htmlの window.opener.document.test();  の部分で「書き込み出来ません」というスクリプトエラーが発生してしまいます。 opener を使用しないで関数を呼び出すことはできるでしょうか?

みんなの回答

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.4

何度もスイマセン。 あのあと、検証してみました。 window.opener.location.hrefでopenerのURLの取得も出来ない為、以下のように変更するとA.html内に記述された関数を実行する事が出来ます。 try{ url = window.opener.location.href; }catch(e){ window.opener.location.href = "http://******/A.html"; } window.opener.document.test();

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.3

失礼、XSS対策ではなくCSRF対策ですね。 iframeなどを使って、違うサイトの操作を乗っ取り、不正入金をさせないようにする為に実装された対策だったと思います。

  • t_netbug
  • ベストアンサー率34% (15/44)
回答No.2

こんにちは。 記憶違いかもですが、確か別ドメインに遷移した場合、opener内の関数を操作あるいは書き込みするのは今は出来なかったと思います。XSS対策だったと思います。 window.opener.location.hrefでopenerのURLは取得出来ますか? URLが取得できるのであれば、それを元に処理を挟んではいかがでしょうか? 例えば if(ドメインが違う時){ window.opener.location.href = "A.html";//元のページに戻す } window.opener.document.test(); 出来なかったらほんっとすいません。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

B.htmlからA.htmlを参照しているのに、 A.htmlがすでにないのであれば、参照のしようがないでしょ?? とりあえずA.html内のスクリプトを外部js化して、 B.htmlでも呼び出すようにしてやれば、関数自体は再利用しやすい とは思いますが、それはあくまでもA.htmlを参照しているわけでは ありませんので・・・

関連するQ&A