# _*_ coding: utf-8 _*_ import sys, os from PyQt5.QtWidgets import (QApplication, QWidget, QGridLayout) from PyQt5.QtWebKitWidgets import (QWebView) from PyQt5 import (QtCore) class MainFrm(QWidget): def __init__(self): super().__init__() self.uri = 'page.htm' self.title = '测试' self.initUI() def test(self, msg): self.test_js(msg) def test_js(self, str): self.webview.page().mainFrame().evaluateJavaScript("test_js('%s')" % str) def initUI(self): grid = QGridLayout() self.webview = QWebView() url = 'http://a.b.c/page.htm' url = 'file:///' + os.path.abspath('page.htm') self.webview.load(QtCore.QUrl(url)) self.webview.show() grid.setContentsMargins(0,0,0,0) grid.addWidget(self.webview, 1, 0) self.setLayout(grid) self.resize(800, 500) self.setWindowTitle(self.title) self.show() class handleJS(QtCore.QObject): def __init__(self): super().__init__() self.frm = None @QtCore.pyqtSlot(str) def test(self, msg): self.frm.test(msg) if __name__ == '__main__': app = QApplication(sys.argv) frm = MainFrm() hjs = handleJS() page = frm.webview.page().mainFrame() hjs.frm = frm page.javaScriptWindowObjectCleared.connect( lambda: page.addToJavaScriptWindowObject('myWindow', hjs) ) sys.exit(app.exec_())
page.htm
<!DOCTYPE html> <html> <head> <title>test</title> <meta charset="utf-8"> </head> <body> <button onclick="test()">测试</button> <script type="text/javascript"> function test(){ myWindow.test('hello world'); } function test_js(str){ alert(str); } </script> </body> </html>