小白白也能学会的 PyQt 教程 —— 关于 runJavaScript 无法加载 JavaScript 脚本的解决方法


如果您确认 self.webview.load(QUrl.fromLocalFile(self.url)) 可以正确加载页面,并且在浏览器中运行 JavaScript 代码也没有问题,那么可能的原因是在 self.webview.page().runJavaScript 调用之前页面还没有完全加载完成。

为了确保页面加载完成后再执行 JavaScript 代码,您可以使用 QWebEngineViewloadFinished 信号。这个信号在页面加载完成后触发,可以在信号的槽函数中调用 runJavaScript

以下是如何使用 loadFinished 信号的示例代码:

class Window(QtWidgets.QWidget):
    def __init__(self, path, bookname):
        super().__init__()
        self.webview = QtWebEngineWidgets.QWebEngineView()
        # 其他初始化代码

        # 连接loadFinished信号到槽函数
        self.webview.loadFinished.connect(self.onPageLoadFinished)

        # 加载页面
        self.webview.load(QUrl.fromLocalFile(self.url))

    def onPageLoadFinished(self, ok):
        if ok:
            # 页面加载完成后执行JavaScript代码
            self.webview.page().runJavaScript("MyJavaScript();")
        else:
            print("页面加载失败")
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.

在上面的示例中,将 loadFinished 信号连接到名为 onPageLoadFinished 的槽函数。当页面加载完成时,将调用 onPageLoadFinished 函数,并在函数内部检查 ok 参数的值,以确保页面成功加载。然后,在条件为 ok 的情况下,调用 runJavaScript 来执行您的 JavaScript 代码。

这样做可以确保 JavaScript 代码在页面加载完成后执行,以提供正确的环境和上下文。


posted @ 2023-05-27 00:26  繁依Fanyi  阅读(10)  评论(0)    收藏  举报  来源