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を再実装する特別な方法はありますか?