お世話になっております。
window.openで開いた先の一覧画面でクリックすると、その内容を親画面に返す処理を実装します。
親画面に渡す際にwindow.openerを使用しています。
ここで、親画面と子画面ではサイトのURLが以下例のように異なります。
親画面:https://client1.test.com/
子画面:https://common.test.com/
Internet Explorerではこの処理で正常に親画面に値が返されます。
Chromeの場合、エラーになってしまいます。
いわゆるCORS(Cross-Origin Requests)が原因だと考えており、ヘッダーに下記を埋め込んでみたのですが正常動作しません。
ブラウザ側の設定は変更していません。(ユーザーがいるものなので変更できないです)
ChromeのCORS対策を超えるための設定をご教示いただけないでしょうか。
親画面のJavaScript:
JavaScript
1// 子画面を開く 2var ShowSearch = function () { 3 window.open("https://common.test.com/", "_blank"); 4}; 5// 子画面から値を受け取る 6var OnSelectedItem = function (value) { 7 alert(value["test"]); 8};
子画面のJavaScript:
JavaScript
1<script> 2var OnSelect = function () { 3 if (window.opener && window.opener.OnSelectedItem) { 4 var result = {}; 5 result["test"] = "test"; 6 // 子画面に値を渡す 7 window.opener.OnSelectedItem(result); 8 } 9}; 10</script> 11<button type="button" onclick="OnSelect();">選択</button>
エラーメッセージ:
Uncaught DOMException: Blocked a frame with origin "https://common.test.com/" from accessing a cross-origin frame.
(window.opener.OnSelectedItemで発生します)
親画面、子画面両方のサーバーサイドでHttpのレスポンスヘッダーに以下を追加しています。
Access-Control-Allow-Origin:* Access-Control-Allow-Headers:* Access-Control-Allow-Methods:GET,POST,HEAD,OPTIONS Cross-Origin-Opener-Policy:Allow Cross-Origin-Window-Policy:Allow X-Frame-Options: sameorigin
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/09 09:44