使用PySide覆盖QWebPage中的shouldInterruptJavaScript

时间:2011-07-29 03:20:17

标签: python qt qtwebkit pyside qwebpage

我想覆盖PySide.QtWebKit.QWebPage.shouldInterruptJavaScript()插槽以静默忽略JavaScript中断请求。我有自己的超时计时器设置,我不需要默认的消息对话框。

引用PySide documentation

  

由于二进制兼容性限制,此功能不是虚拟的。如果要在PySide.QtWebKit.QWebPage子类中提供自己的实现,请重新实现子类中的QWebPage.shouldInterruptJavaScript()槽。 QtWebKit将动态检测插槽并调用它。

这是我编写的示例代码,但我从未调用过shouldInterruptJavaScript()方法。我看到PhantomJS和webscraping开源项目中使用的代码相同。

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,Qt 4.7.2。现在我正在构建最新的PySide,所以我可以测试它,但是我在最近的发行说明或错误报告中找不到关于shouldInterruptJavaScript的任何内容。

有什么特别之处我应该如何在我的子类中重新实现shouldInterruptJavaScript?

1 个答案:

答案 0 :(得分:0)

现在,在版本1.0.6之后,这已在PySide git master上修复。