0

PySide.QtWebKit.QWebPage.shouldInterruptJavaScript()スロットをオーバーライドして、JavaScript割り込み要求を黙って無視したいと思います。独自のタイムアウトタイマーを設定していて、デフォルトのメッセージダイアログは必要ありません。

PySideドキュメントの引用:

バイナリ互換性の制約があるため、この関数は仮想ではありません。PySide.QtWebKit.QWebPageサブクラスで独自の実装を提供する場合は、代わりにサブクラスでQWebPage.shouldInterruptJavaScript()スロットを再実装します。QtWebKitはスロットを動的に検出し、それを呼び出します。

これは私が書いたサンプルコードですが、shouldInterruptJavaScript()メソッドが呼び出されることはありません。PhantomJSとウェブスクレイピングのオープンソースプロジェクトで使用されているのと同じコードが表示されます。

import sys
from PySide import QtCore
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebPage

class QWebPageHeadless(QWebPage):
    # FIXME: This is not working, the slot is not overriden!
    @QtCore.Slot()
    def shouldInterruptJavaScript(self):
        print "Interrupt javascript request ignored..."
        return False

if __name__ == "__main__":
    app = QApplication(sys.argv)
    page = QWebPageHeadless()
    page.mainFrame().setHtml('<script>while(1);</script>')
    sys.exit(app.exec_())

Python 2.7.1、PySide 1.0.2、Qt4.7.2を使用しています。現在、テストできるように最新のPySideを構築していますが、最近のリリースノートやバグレポートでshouldInterruptJavaScriptについて何も見つかりません。

サブクラスでshouldInterruptJavaScriptを再実装する特別な方法はありますか?

4

1 に答える 1

0

これは、リリース 1.0.6 以降の PySide git master で修正されました。

于 2011-09-03T16:11:02.927 に答える