5

ウィンドウでブラウザ レベルの印刷ダイアログを開くボタンを提供しようとしています。私は最初に window.print(); を試しました。jQueryを使用して、インラインの「onclick」<input>と入力のclick()関数を使用し、クリックすると両方とも同じエラーが発生します。

TypeError: オブジェクト [オブジェクト グローバル] のプロパティ 'print' は関数ではありません

これはポップアップ ウィンドウであることを指摘しておく必要がありますが、親ページで window.print() を使用する任意の形式が正常に機能することを除けば、それが問題になるとは思いませんでした。

ウィンドウオブジェクトのどこかで何かが起こっているに違いないように思えたので、コンソールで次のことを行いました。

ウィンドウ名

"加入"

window.self

ウィンドウ {上: ウィンドウ、ウィンドウ: ウィンドウ、場所: ロケーション、外部: オブジェクト、クロム: オブジェクト…}

窓の場所

場所{割り当て: 関数、置換: 関数、リロード: 関数、祖先オリジンズ: DOMStringList、オリジン: "http://local.xxx.xxx:8080"…}

したがって、ウィンドウ オブジェクトがそこにあり、期待どおりに定義されているように見えます。

この同じウィンドウ オブジェクトに対して、close()、confirm()、alert()、scrollTo() などの他のメソッドを実行することもでき、それらは正常に動作します。では、なぜ print() を使わないのでしょうか?

ページの内容は問題ではないようです。iFrame やフレームも使用していません。ポップアップのすべてのコンテンツを次のように置き換えました

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head></head>
<body>Foo</body>
</html>

同じ結果で。したがって、他のコードが干渉していないことはほぼ確実です。

編集

print() をトリガーするために使用していたコード:

$('.foobar').click(function(){
    window.print();
});

今はコンソールでやっています。

ボタン

<input type="button" class="foobar" value="Print" />
4

3 に答える 3

9

これは、id が の要素がある場合に発生しますprint

要素 ID はwindow(グローバル オブジェクト) のプロパティになり、同じ名前の既存のメンバーを非表示にします。

于 2013-01-17T16:37:32.867 に答える
3

SLaks は何かに取り組んでいると思います。DOM 要素でない場合は、グローバル変数を定義している可能性のある誤った JavaScript をトラップするために、セッター関数に固執してみてください。他の JavaScript よりも前に、ページの上部に次のようなものを貼り付けます。

window.__defineSetter__(
    "print",
    function(){alert("GOTCHA!"); debugger;}
);

JavaScript デバッガーがアクティブな状態でページを開くと、window.print が別のものに変更されたときに停止するはずです。コール スタックを上って、有罪の当事者を見つけます。

頑張ってください!

于 2013-01-17T17:11:50.800 に答える
2

解決しました。@SLaks が提案した正確な方法ではありませんが、正しい方向に進みました。

ラン

window.__defineSetter__("print", function(){alert("GOTCHA!"); debugger;});

早い段階で、はるか上流のスクリプトが print を定義していることを発見しました。

var print = blah blah

そこで、print() メソッドに別名を付けました。

window.realPrint = window.print;

そしてそれを使用しました。これはハックですが、上流の問題をより完全に解決できるようになるまで、一時的に機能します。とにかく、このデバッグ方法とちょっとしたハックが他の誰かに役立つかもしれないと考えました。

于 2013-01-17T17:11:50.493 に答える