5

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でも。チェックしていません。

4

2 に答える 2

1

jQueryは使えますか?IE 6-8 で iframe を介して window.postMessage を実行できる便利なプラグインがあります: http://benalman.com/code/test/js-jquery-postmessage/

iframe からポップアップを開き、postMessage を使用して iframe と親の間でオブジェクトを渡すことができます。

于 2009-10-04T02:06:42.313 に答える
0

document.domain を設定する前に window.location.protocol プロパティを読み取ることができず、その値を条件付き割り当てで使用できません。これを行うには、Web フレームワーク ライブラリを再構築する必要がありますが、やりたいことではありません。

document.domain を設定する前に window.location.protocol を読み込んで、書き込み専用になったら window.location.protocol を設定できませんか? フレームワークの再構築も必要ですか?それはハックですが、IEもそうです。

于 2009-09-30T19:55:31.070 に答える