0

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

引用 PySide文档

由于二进制兼容性限制,此功能不是虚拟的。如果您想在 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 有什么特别的吗?

4

1 回答 1

0

在 1.0.6 版之后,这已在 PySide git master 上得到修复。

于 2011-09-03T16:11:02.927 回答