3

WebアプリケーションのJavascriptは、次のループを実行します。

    for (var name in this) {
        if(typeof(this[name]) == "function") {
            if((/^on_|^do_/).test(name)) {
        console.debug("Adding ", name, " to ", this, "(", this[name], ")");
                f = this[name].bind;
        console.debug(f);
                this[name] = this[name].bind(this);
            }
        }
    }

Chrome 24.0.1312.56では、この行f = this[name].bindはfをネイティブコードに正しく設定しますfunction.bind()が、私のQWebKit Qtアプリケーションでは、fを「未定義」に設定します。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind

ここでQtWebkitが正しく動作するように説得する方法はありますか?


どうやら、Function.prototype.bindはECMAScript 5の一部です。webkitでの実装は(修正されたバグ)でカバーされているはずです:https ://bugs.webkit.org/show_bug.cgi?id = 26382

おそらく、私が見逃しているECMAScript 5を有効にするモードがありますか?


どうやら私はQtWebkitにバージョン534.34を使用しています:

(Pdb)str(QtWebKit.qWebKitVersion()) '534.34'

これによると: https ://trac.webkit.org/changeset/85696/trunk/Source/WebKit/mac/Configurations/Version.xcconfig

リビジョン85696に対応します。上記のバグのコメント(「r95751で修正済み」)と組み合わせると、新しいバージョン、特に535.5よりも優れたバージョンが必要なようです。PyQtのどのバージョンがそれを使用しているかを見つけるために...

ありがとう。

4

2 に答える 2

2

PyQtの最新バージョン(4.9.6-1)は、wekbitバージョン534.34に対してコンパイルされているようです。Function.prototype.bindをサポートするwebkitの最初のリリースは535.5です。

さらに、PySite1.2.2とPyQt4.9.6-1の両方がWebkitバージョン535.34を報告しており、Function.prototype.bindがないようです。

于 2013-02-04T20:13:55.140 に答える
-1

次のコードを使用してみてください。Function.prototype.bind

this[name] = Function.prototype.bind.call(this[name], this)

IEでは、一部のホストオブジェクトのメソッド(関数)にbindメソッドがありません...関連するものである可能性があります。

于 2013-02-04T19:42:26.673 に答える