| 25 | |
| 26 | |
| 27 | class WebEngineView(QWebEngineView): |
| 28 | customSignal = pyqtSignal(str) |
| 29 | |
| 30 | def __init__(self, *args, **kwargs): |
| 31 | super(WebEngineView, self).__init__(*args, **kwargs) |
| 32 | self.initSettings() |
| 33 | self.channel = QWebChannel(self) |
| 34 | # 把自身对象传递进去 |
| 35 | self.channel.registerObject('Bridge', self) |
| 36 | # 设置交互接口 |
| 37 | self.page().setWebChannel(self.channel) |
| 38 | |
| 39 | # START #####以下代码可能是在5.6 QWebEngineView刚出来时的bug,必须在每次加载页面的时候手动注入 |
| 40 | #### 也有可能是跳转页面后就失效了,需要手动注入,有没有修复具体未测试 |
| 41 | |
| 42 | # self.page().loadStarted.connect(self.onLoadStart) |
| 43 | # self._script = open('Data/qwebchannel.js', 'rb').read().decode() |
| 44 | |
| 45 | # def onLoadStart(self): |
| 46 | # self.page().runJavaScript(self._script) |
| 47 | |
| 48 | # END ########################### |
| 49 | |
| 50 | # 注意pyqtSlot用于把该函数暴露给js可以调用 |
| 51 | @pyqtSlot(str) |
| 52 | def callFromJs(self, text): |
| 53 | QMessageBox.information(self, "提示", "来自js调用:{}".format(text)) |
| 54 | |
| 55 | def sendCustomSignal(self): |
| 56 | # 发送自定义信号 |
| 57 | self.customSignal.emit('当前时间: ' + str(time())) |
| 58 | |
| 59 | @pyqtSlot(str) |
| 60 | @pyqtSlot(QUrl) |
| 61 | def load(self, url): |
| 62 | """ |
| 63 | eg: load("https://pyqt.site") |
| 64 | :param url: 网址 |
| 65 | """ |
| 66 | return super(WebEngineView, self).load(QUrl(url)) |
| 67 | |
| 68 | def initSettings(self): |
| 69 | """ |
| 70 | eg: 初始化设置 |
| 71 | """ |
| 72 | # 获取浏览器默认设置 |
| 73 | settings = QWebEngineSettings.globalSettings() |
| 74 | # 设置默认编码utf8 |
| 75 | settings.setDefaultTextEncoding("utf-8") |
| 76 | # 自动加载图片,默认开启 |
| 77 | # settings.setAttribute(QWebEngineSettings.AutoLoadImages,True) |
| 78 | # 自动加载图标,默认开启 |
| 79 | # settings.setAttribute(QWebEngineSettings.AutoLoadIconsForPage,True) |
| 80 | # 开启js,默认开启 |
| 81 | # settings.setAttribute(QWebEngineSettings.JavascriptEnabled,True) |
| 82 | # js可以访问剪贴板 |
| 83 | settings.setAttribute( |
| 84 | QWebEngineSettings.JavascriptCanAccessClipboard, True) |