web-dev-qa-db-ja.com

親domにアクセスするポップアップウィンドウ

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

私は標準を使用しています

window.open()

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

前もって感謝します!

17
Scoota P

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
    }
}
26

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

4
Sajjan Sarkar

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

var popUpHandle = window.open();

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

var originalWindow = window.opener;

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

0
cimnine

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

var elem = parent.document.getElementById("overlay_modal");
if (elem) {
alert('setting attribute');
elem.setAttribute("onclick", "Windows.close('2', event);");
}
0
subho