18

印刷ページを生成するために親domにアクセスする必要があるポップアップウィンドウがあります。印刷ページの構造は親の構造とは大幅に異なるため、印刷cssでは問題は解決しません。基本的に、ウィンドウをポップアップしてから、そのウィンドウに親からデータを取得させ、ポップアップからdomにアクセスして、サーバーに再度アクセスすることなく印刷ページを生成するようにします。これをどのように達成できるかについてのアイデアはありますか?

標準を使用しています

window.open()

ウィンドウをポップアップします。私はこのソリューションがハックではなく、すべての主要なブラウザーとクロスブラウザー互換である必要があります。

前もって感謝します!

4

4 に答える 4

29

Sajjanの答えは始まりですが、オブジェクトにアクセスする前に、オブジェクトが使用可能であることを確認することをお勧めします。

var opener = window.opener;
if(opener) {
    var oDom = opener.document;
    var elem = oDom.getElementById("your element");
    if (elem) {
        var val = elem.value;
    }
}

そうしないと、オープナーが最初の呼び出しに応答せず、そこから要素を取得できないというリスクがあります。

jQueryとして、私は思います(答えに基づいて、ここで:jqueryを使用して親ウィンドウオブジェクトにアクセスする方法は?):

var opener = window.opener;
if(opener) {
    var elem = opener.$("#elementId");
    if (elem) {
        var val = elem.val(); // I forgot we're dealing with a jQuery obj at this point
    }
}
于 2012-11-09T16:22:49.637 に答える
4

window.opener.document.getElementById( "your element")。value

于 2012-11-09T16:19:12.423 に答える
0

MDNによるとwindow.open()、は新しいウィンドウへのハンドルを返します。

var popUpHandle = window.open();

このハンドルを使用すると、ポップアップのDOMにアクセスできるはずです。すでに述べたを使用してその逆も可能window.openerです。MDNを再度参照してください。

var originalWindow = window.opener;

それでも、これはかなり古いトピックであり、あなたのアプローチはすでに百万回以上行われているので、あなたのお気に入りの検索エンジンはあなたにもっと詳細を提供します。

于 2012-11-09T16:21:16.767 に答える
0

私の場合、parent.documentが役に立ちました。

var elem = parent.document.getElementById("overlay_modal");
if (elem) {
alert('setting attribute');
elem.setAttribute("onclick", "Windows.close('2', event);");
}
于 2018-10-12T07:51:47.367 に答える