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 设置为 native code 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。

此外,PySite 1.2.2 和 PyQt 4.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 中,一些宿主对象的方法(函数)上没有绑定方法......可能是相关的。

于 2013-02-04T19:42:26.673 回答