使用 PySide 覆盖 QWebPage 中的 shouldInterruptJavaScript

Posted

技术标签:

【中文标题】使用 PySide 覆盖 QWebPage 中的 shouldInterruptJavaScript【英文标题】:Override shouldInterruptJavaScript in QWebPage with PySide 【发布时间】:2011-07-29 03:20:16 【问题描述】:

我想覆盖 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?

【问题讨论】:

同PySide 1.0.5... 我遇到了与 PyQt 完全相同的问题。您找到解决方案了吗? 【参考方案1】:

这在 PySide git master 1.0.6 发布后现已修复。

【讨论】:

嘿,万岁!刚刚从大师那里编译了代码,它工作得很好。

以上是关于使用 PySide 覆盖 QWebPage 中的 shouldInterruptJavaScript的主要内容,如果未能解决你的问题,请参考以下文章

处理 QWebView / QWebPage 中的错误

如何复制 QWebPage?

PySide2 + QML:QApplication:通过了无效的样式覆盖,忽略它

子类化并覆盖 PySide2 小部件方法;我在哪里可以找到参考资料?

在 PyQt5 和 PySide2 中覆盖paintEvent

python3.4中的QWebPage和pymongo在哪里可以找到?