www.example.com/index.htmlのスクリプトがポップアップウィンドウでhome.example.com/foo.htmlを開くページがあります。ユーザーがポップアップを閉じたら、Javascript関数を呼び出してオープナーページに通知したいと思います(これはDOMでいくつかのことを行います)。私はunbeforeunload
このように使用します:
// In index.html on www.example.com:
window.fn = function () { /* Perform stuff after foo.html has closed */ }
// In foo.html on home.example.com:
window.onbeforeunload = function () {
if (window.opener && window.opener.fn)
window.opener.fn();
};
Webページが異なるドメインにあるため、これは機能しません。document.domain
これを克服するためにプロパティを設定できます:
document.domain = "example.com";
残念ながら、これはfoo.html側で使用するWebアプリフレームワーク(Apache Wicket)ではうまく機能しません。これには、次のようなスクリプトが含まれているためです。
var src = (window.location.protocol == 'https:') ? something : other;
どうやら、IE6 *では、ドキュメントドメインを設定すると、location
オブジェクトが書き込み専用になるため、読み取ろうとするとwindow.location.protocol
「アクセスが拒否されました」とスローされます。
だから、私の質問は、スクリプトがオブジェクトのコンテンツを読み取れるようにしながら、クロスドメインのJavascript関数呼び出しを許可するにはどうすればよいですか?location
- サーバー経由で行けません。(呼び出したい関数によって実行される作業は、実際にはそのようには機能しません。)
window.location.protocol
設定する前にプロパティを読み取ってdocument.domain
から、条件付き割り当てでその値を使用することはできません。そうすることで、Webフレームワークライブラリを再構築する必要があります。私がやりたいことではありません。
*おそらく他のバージョンのIEでも。チェックしていません。