PyQt QWebkit Javascript Function.bind не существует (отсутствуют функции ECMAScript 5)

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 должна быть описана (исправлена ​​ошибка): https://bugs.webkit.org/show_bug.cgi?id=26382

Возможно, есть режим для включения ECMAScript 5, который мне не хватает?


По-видимому, я использую версию 534.34 для QtWebkit:

(Pdb) ул(QtWebKit.qWebKitVersion()) '534.34'

Что согласно этому: https://trac.webkit.org/changeset/85696/trunk/Source/WebKit/mac/Configurations/Version.xcconfig

Соответствует версии 85696. В сочетании с комментарием к ошибке выше («Исправлено в r95751») кажется, что мне нужна более новая версия, в частности, лучше, чем 535.5. Теперь, чтобы узнать, какая версия PyQt использует это...

Спасибо.


person EB.    schedule 04.02.2013    source источник


Ответы (2)


Похоже, что последняя версия PyQt (4.9.6-1) скомпилирована с версией wekbit 534.34. Первый выпуск webkit, поддерживающий Function.prototype.bind, — 535.5.

Кроме того, кажется, что и PySite 1.2.2, и PyQt 4.9.6-1 сообщают о версии webkit 535.34 и не имеют Function.prototype.bind.

person EB.    schedule 04.02.2013

Попробуйте использовать следующий код, который заставляет вас использовать Function.prototype.bind

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

В IE у некоторых хост-объектов нет метода привязки к своим методам (функциям)... может быть что-то связанное.

person Juan Mendes    schedule 04.02.2013
comment
Я пытался запросить Function.prototype.bind напрямую, на что QtWebkit возвращает значение undefined. (Во встроенной консоли разработчика) - person EB.; 04.02.2013