PyQt QWebkit Javascript Function.bind不存在(ECMAScript 5缺少函数)

时间:2013-02-04 19:22:18

标签: qt pyqt qtwebkit ecmascript-5 qwebkit

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设置为'undefined'。

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

知道我怎么能说服QtWebkit在这里表现正确吗?


显然,Function.prototype.bind是ECMAScript 5的一部分。它在webkit中的实现应该被(修复的bug)覆盖: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使用的版本......

感谢。

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分:-1)

尝试使用以下代码强制您使用Function.prototype.bind

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

在IE中,一些宿主对象的方法(函数)没有绑定方法......可能是相关的。