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使用的版本......
感谢。
答案 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中,一些宿主对象的方法(函数)没有绑定方法......可能是相关的。