これまでにWebフォーム開発で、フォーム本体(親ウィンドウ)から子ウィンドウを開き、子ウィンドウで入力された情報を保存しつつ概要を親ウィンドウに反映するという形式をとるものをいくつか作ってきました。
上の機能のため親ウィンドウへ内容を反映するのに子ウィンドウからwindow.opener経由で親ウィンドウ要素へアクセスしていたのですが、これまで動作していたjavascriptでエラーが起きていることに本日気づきました。
調査すると、window.openerでnullが返っていました。
さらに調べてみると、各ブラウザのバージョン
Chrome 88.0.4324.182 - 88.0.4324.190
Firefox 85.0.2 - 86.0
Edge 88.0.705.74 - 88.0.705.81
で同じエラーが起きていることがわかりました。つまりこれらのブラウザでは以前に作った同様のフォームは全て動作しないことになります(InternetExplorer11などでは問題なく動作します)。
window.openerでの親ウィンドウへのアクセスは最近になってセキュリティポリシーの変更で制限されるようになったという解説も見かけますが、子ウィンドウを target="_blank" で開くこと、親子ウィンドウのソースが同一ドメインに存在することはクロスドメイン制限を受ける条件から外れているのでwindow.openerがnullになる理由は不明です。
なぜ子ウィンドウからwindow.openerが取得できないのか、これを取得可能にする方法はないのかお分かりの方からご教示いただけないかと思います。よろしくお願いします。
サンプル:
親ウィンドウ parent.html
<html><body> my name is <span id="span1">opener</span>.<br> <a href="child.html" target="_blank">open a child window</a> </body> </html>
子ウィンドウ child.html
<html><body> parent's name?<br> -> <span id="span2"></span> <script> if(window.opener!==null){ document.getElementById('span2').innerHTML = window.opener.document.getElementById('span1').innerHTML; }else{ document.getElementById('span2').innerHTML = 'UNKOWN'; } </script> </body> </html>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/26 04:55
2021/02/26 05:06
2021/02/26 09:36