3

新しくポップアップしたウィンドウの onload 属性を設定する必要があります。次のコードは Firefox で機能します。

<a onclick="printwindow=window.open('www.google.com');printwindow.document.body.onload=self.print();return false;" href='www.google.com'>

ただし、IE でこれを試すと、「printwindow.document.body null または定義されていません」というエラーが表示されます。

目標は、新しいウィンドウをポップして開き、開いたウィンドウの印刷ダイアログを呼び出すことです。

これを機能させる方法の手がかりはありますか?私はそれを制御できないため、ターゲット ページの他の場所で JavaScript を使用しないことが重要です。すべての機能は、上に投稿したリンクに含まれている必要があります。

4

6 に答える 6

4

以前の回答では、新しいウィンドウは同じドメインにある必要があると正しく述べられていましたが、「printwindow.document.body null または定義されていない」というエラーが発生した理由について誤って回答しました。これは、IE が wi​​ndow.open() からステータスを返さないためです。これは、onload が使用可能になる前に、ページを開いてアクセスを試みることができることを意味します。

このため、setTimeout などを使用して確認する必要があります。例えば:

printwindow = window.open('print.html');
var body;
function ieLoaded(){
    body = printwindow.document.getElementsByTagName("body");
    if(body[0]==null){
        // Page isn't ready yet!
        setTimeout(ieLoaded, 10);
    }else{
        // Here you can inject javascript if you like
        var n = printwindow.document.createElement("script");
        n.src = "injectableScript.js";
        body.appendChild(n);

        // Or you can just call your script as originally planned
        printwindow.print();
    }
}
ieLoaded();

これについては、ここでさらに説明します

于 2011-03-30T22:28:19.233 に答える
1

両方のページが同じドメインにない限り、これは不可能です。コードは FF では機能しませんが、現在のページを印刷します。ページが同じドメインにある場合は、次のように記述します。

printwindow=window.open('/mypage.html');
printwindow.onload = function() {
  printwindow.focus();
  printwindow.print();
}
于 2008-10-28T23:28:18.500 に答える
0

onload は、HTML 属性が何を信じさせようとも、body 要素ではなく window オブジェクトの場合のプロパティです。これは参照です:

printwindow.onload

ただし、このコンテキストでは、JavaScript の文字列を渡すことはできません。関数を渡す必要があります。したがって、完全なスクリプトは次のようになります

printwindow.onload=function(){self.print();}

さて、まとめて

<a href="www.google.com" onclick="var printwindow=window.open(this.href,'printwindow');printwindow.onload=function(){self.print();};return false;" >try it</a>

でも!これは、URL「www.google.com」では機能しません。ブラウザーのセキュリティ モデルは、親ウィンドウが子ウィンドウのウィンドウ オブジェクトにアクセスすることを防ぎます。ただし、両方が同じドメイン名に存在しない限りです。

于 2008-10-28T23:06:14.253 に答える
0

jQuery を確認してください。特にドキュメント準備機能。

http://docs.jquery.com/Tutorials:How_jQuery_Works#Launching_Code_on_Document_Ready

于 2008-10-28T23:12:17.533 に答える
0

「printwindow.document.body.onload=self.print();」に依存しています。子ドキュメントの読み込みが完了する前に行が実行されています。私はあなたがそれを保証できるとは思わない。

ここにアイデアがあります: iframe に必要なページだけを含む HTML またはページを準備します。このページには body.onload=self.print() があります。

于 2008-10-28T23:02:49.020 に答える
-1

すべてのブラウザーで機能する最終的な (確かに貧弱な) 解決策は、onload 属性を変更する代わりに、setTimeout を使用して print() をそのように呼び出すことでした。

<a onclick="self.printwindow=window.open('print.html');setTimeout('self.printwindow.print()',3000);return false;" href='print.html'>
于 2008-10-29T18:36:36.107 に答える