场景需求

涉及知识点

问题(两种方式

  1. 使用监听ipcmessage需要嵌入页面安装electron需求不允许
  2. 使用contextBridge创建全局对象,无法接收消息

解决思路

contextBridge暴露ipcRenderer嵌入页面使用,再用ipcmessage监听收到的消息

父级页面

<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进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注