アプリ版:「スタンプのみでお礼する」機能のリリースについて

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 を使用しないで関数を呼び出すことはできるでしょうか?

A 回答 (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();
    • good
    • 0

失礼、XSS対策ではなくCSRF対策ですね。


iframeなどを使って、違うサイトの操作を乗っ取り、不正入金をさせないようにする為に実装された対策だったと思います。
    • good
    • 1

こんにちは。


記憶違いかもですが、確か別ドメインに遷移した場合、opener内の関数を操作あるいは書き込みするのは今は出来なかったと思います。XSS対策だったと思います。

window.opener.location.hrefでopenerのURLは取得出来ますか?
URLが取得できるのであれば、それを元に処理を挟んではいかがでしょうか?
例えば
if(ドメインが違う時){
window.opener.location.href = "A.html";//元のページに戻す
}
window.opener.document.test();
出来なかったらほんっとすいません。
    • good
    • 0

B.htmlからA.htmlを参照しているのに、


A.htmlがすでにないのであれば、参照のしようがないでしょ??

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!