1

複数のフレームにまたがる必要があるポップアップ ウィンドウがあるため、これを機能させるために window.createPopup を使用しています。(IE6、7、8)

以下は、ポップアップを作成するために使用している関数です。

function ShowMyPopup() {
    notificationPopup = window.createPopup();
    $(notificationPopup.document.body).load("/notification.html");
    notificationPopup.show($(sourceFrame.document.body).width() - 510, $(sourceFrame.document.body).height() - (510 - $(sourceFrame.document.body).height()), 500, 500, sourceFrame.document.body);
}

これはかなりうまくいくようです。ポップアップウィンドウが表示されます。問題は、私が何をしても、結果のポップアップ ウィンドウで DOM 要素にアクセスできないように見えることです。私はさまざまな jQuery メソッドとまっすぐな getElementById を試しましたが、すべて NULL を返します。以下は、notification.html の内容です。

<html>
<head>
    <script type="text/javascript">
        $(document).ready(function () {
            alert($(document).html());
            alert($("#divNotification").html());
            alert(document.getElementById("divNotification"));
        });
    </script>
</head>
<body>
    <div id="divNotification" onclick="$(this).toggle();">
        <h3>Some Notification!</h3>
        Testing 1234...
    </div>
</body>
</html>

3 つのアラートが表示されるので、jQuery が機能していることはわかりますが、3 つのアラートはすべて単に「NULL」と表示されます。結果の div をクリックすると、onClick が起動しますが、"Object Expected" エラーが発生します。

ここで何が起こっているのですか?

4

2 に答える 2

0

このリファレンスによると、window.createPopup()「スクリプトは、メソッドによって返されるポップアップ オブジェクトに (外部 URL ではなく) コンテンツを割り当てる必要があります」。

コンテンツに外部 URL を割り当てたい場合は、非独占的な (クロスブラウザー) メソッドを使用する必要がありますwindow.open()

ではwindow.open()、メイン ウィンドウとポップアップ ウィンドウ間の通信は引き続き実行できます。

でポップアップを開くと仮定すると、次のようになりますvar myPopup = window.open(...);

  • メインウィンドウのアドレスポップアップmyPopup
  • ポップアップはメインウィンドウを次のようにアドレス指定しますopener
于 2012-04-16T20:12:20.860 に答える
0

Ok。私はこれを理解しました。それはかなり直感に反しています。

基本的に、関連するすべての JavaScript ライブラリをソース フレームにロードすることになりました。次に、これらのメソッドにアクセスするために、ソース フレームをその名前で明示的に参照する必要があります。

JavaScript (ポップアップ ウィンドウ内のJavaScript であっても) がポップアップ ウィンドウの DOM にアクセスする必要がある場合は、それが機能するように、それを完全に修飾する (または jQuery に正しいルート オブジェクトを提供する) 必要があります。

たとえば、これが私の新しい notification.html です。

<div id="divNotification" onclick="top.SourceFrame.MakePopupRed();">
    <h3>Some Notification!</h3>
    Testing 1234...
</div>

さて、私のソース フレームの参照された JavaScript ライブラリで:

function MakePopupRed() {
    if (notificationPopup) {
        $("#divNotification", notificationPopup.document).css("background-color", "red");
    }
}

したがって、基本的に、window.createPopup から作成されたポップアップ内で実行される JavaScript は、ポップアップ ウィンドウ自体ではなく、親 window のコンテキストで実行されるように見えます!

于 2012-04-17T18:37:16.257 に答える