场景需求:
涉及知识点:
问题(两种方式)
解决思路
contextBridge暴露ipcRenderer给嵌入页面使用,再用ipc–message监听收到的消息
父级页面
<webview v-if="webviewerUrl" ref="webviewRef" class="webview" src="D://child.html" allowp
:preload="webViewerPreload()" nodeintegration plugins disablewebsecurity>
</webview>
<script lang="ts" setup>
const webviewRef = ref()
// 控制第三方页面操作栏
const initWebviewEvent= () => {
webviewRef.value.addEventListener('dom-ready', () => {
// webviewRef.value.openDevTools() //打开嵌入页面的控制台
})
// 在此监听事件中接收嵌入页面的消息
webviewRef.value.addEventListener('ipc-message', function (event: any) {
if (event.channel === 'closeWindow') {
// 需要执行的代码
}
});
}
onMounted(() => {
nextTick(() => {
initWebviewEvent()
})
})
onBeforeUnmount(() => {
webviewRef.value.removeEventListener('dom-ready')
webviewRef.value.removeEventListener('ipc-message')
})
</script>
preload引入本地文件(file://
格式)
import path from 'path'
export const webViewerPreload = () => {
if (process.env.NODE_ENV === 'production') {
return path.join(__dirname, '/preload.js')
} else {
return path.resolve('./src/entries/webViewer/preload.js')
}
}
preload.js 暴露ipcRenderer 到全局
const { contextBridge, ipcRenderer } = require('electron')
// 存储全局方法
contextBridge.exposeInMainWorld('electron', {
ipcRenderer: ipcRenderer
})
嵌入页面 child.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>child</title>
</head>
<body>
<button onclick="closeWindow()">关闭窗口</button>
<script type="text/javascript">
function closeWindow(){
const ipcRenderer = window.electron.ipcRenderer
ipcRenderer.sendToHost('closeWindow')
}
</script>
</body>
</html>
总结:两种方法看了很久都没法实现,后面突然想到可以结合起来,可以将嵌入页面的消息发送给父级,但是嵌入页面不能收消息,不知道怎么解决。
原文地址:https://blog.csdn.net/mooonyuan/article/details/129057423
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_37804.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。