4

OK、私はこれをWebでよく探しましたが、答えが見つかりません。

ブラウザ間のCSSの違いは期待できますが、JavaScriptの違いもありますか?

では、なぜこれがIE8で機能するのか:

window.print(); // works

しかしwindow.print、関数に渡してそれを呼び出すと、IE8では機能しません(IE9では機能します):

function callIt(f){
    f.call();
};



callIt(window.print);

既知の問題ですか?


編集

OK、それが機能しないということは、それが単にそれを無視することを意味し、javascriptエラーなどはありません。

申し訳ありませんが、このエラーが発生します:

   Object doesn't support this property or method

編集2

使用する必要があるcallapply、コンテキストを渡す必要があるためです。関数を渡すことができ、コンテキストや引数を渡す可能性のあるクラスを作成しようとしています。それは私の問題を解決しないので、それはf() 答えではない使用するように私に言わないでください。質問はオンcallapplyです。

4

3 に答える 3

10

window.*関数は、IE < 9 でユーザーが作成した関数とは別の型のようです。したがって、 Function.prototype.*. あなたはそれを見るでしょう

typeof alert === 'object'

function a(){}

typeof a === 'function'

これは、どのwindow.*関数でも発生します。IE < 9 のみ。WTG Miscrosoft。

ただし、試すことができます

Function.prototype.call.call(window.print)

それがあなたのために働くかどうか見てください。

于 2011-07-29T15:32:13.337 に答える
2
    function callIt(f) {
        if (f) f();
    }

    callIt(window.print);

やった、いいえ?


アップデート

私が質問に答えるというポスターの要求に従って、うまくいく解決策をお勧めしません。

IE で typeof(window.print) を表示すると、それ自体が型オブジェクトとして報告されていることがわかります。型オブジェクトには、適用または呼び出しメソッドがありません。私の意見では、あなたのデザインはタスクに対して間違っています。ただし、うさぎの穴をたどりたい場合は、ここにトップがあります。

var p = window.print;
window.print = function() { p(); }

function callIt(f){
     f.call();
}

callIt(window.print);

他のブラウザで何が起こるか、必要な場所でそれを説明するためにいくつの手続き上の例外を作成する必要があるかはわかりません.

于 2011-07-29T14:06:31.103 に答える
1

ほとんどの場合、.call()ここでは使用しないでください。f()はメソッドをf.call()呼び出しますが、 unset で呼び出しますthis。es3 (厳密な es5 ではありません) では、未定義の値thisが に強制されwindowます。IE9 はこれを適切に処理しますが、IE8 は処理しないと思いますが、これは動作に基づく推測にすぎません。

printの値が気になる場合は、を正しく設定するために、 のようにthis呼び出す必要があります。その場合、ウィンドウから「切り取られ」ないように、無名関数でラップする必要がある場合があります。window.print()thisprintcallIt(function() { window.print();});

于 2011-07-29T14:58:18.187 に答える