前后段支持互发消息并支持调试

This commit is contained in:
ShaoHua
2026-03-11 21:54:04 +08:00
parent dc23416d7e
commit be9b042a05
16 changed files with 1480 additions and 5 deletions
+84
View File
@@ -0,0 +1,84 @@
<script setup>
import { ref, onMounted, onUnmounted } from 'vue'
const receivedMsg = ref('等待消息...')
const inputMsg = ref('')
const handleMessage = (event) => {
console.log("收到来自 WPF 的消息:", event.data);
receivedMsg.value = event.data
}
onMounted(() => {
if (window.chrome && window.chrome.webview) {
window.chrome.webview.addEventListener('message', handleMessage)
}
})
onUnmounted(() => {
if (window.chrome && window.chrome.webview) {
window.chrome.webview.removeEventListener('message', handleMessage)
}
})
const sendMessageToWPF = () => {
if (window.chrome && window.chrome.webview) {
window.chrome.webview.postMessage(inputMsg.value)
} else {
alert('未在 WebView2 环境中运行')
}
}
</script>
<template>
<div class="container">
<h1>Vue 3 + WebView2 交互演示</h1>
<div class="card">
<h3>接收来自 WPF 的消息:</h3>
<p class="msg-box">{{ receivedMsg }}</p>
</div>
<div class="card">
<h3>发送消息给 WPF:</h3>
<input v-model="inputMsg" placeholder="输入消息" />
<button @click="sendMessageToWPF">发送到 WPF</button>
</div>
</div>
</template>
<style scoped>
.container {
font-family: Arial, sans-serif;
padding: 20px;
text-align: center;
}
.card {
border: 1px solid #ddd;
border-radius: 8px;
padding: 15px;
margin: 10px 0;
background: #f9f9f9;
}
.msg-box {
font-weight: bold;
color: #2c3e50;
font-size: 1.2em;
}
input {
padding: 8px;
width: 200px;
margin-right: 10px;
}
button {
padding: 8px 15px;
background-color: #42b883;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #3aa876;
}
</style>
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>

After

Width:  |  Height:  |  Size: 496 B

+43
View File
@@ -0,0 +1,43 @@
<script setup>
import { ref } from 'vue'
defineProps({
msg: String,
})
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Learn more about IDE Support for Vue in the
<a
href="https://vuejs.org/guide/scaling-up/tooling.html#ide-support"
target="_blank"
>Vue Docs Scaling up Guide</a
>.
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>
+16
View File
@@ -0,0 +1,16 @@
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
// 创建 Vue 实例
const app = createApp(App)
// 核心:开发环境强制开启 Vue DevtoolsWebView2 调试必备)
if (import.meta.env.DEV) {
app.config.devtools = true
// 可选:开启性能调试(如需分析性能)
app.config.performance = true
}
// 挂载到 DOM
app.mount('#app')
+79
View File
@@ -0,0 +1,79 @@
:root {
font-family: system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5;
font-weight: 400;
color-scheme: light dark;
color: rgba(255, 255, 255, 0.87);
background-color: #242424;
font-synthesis: none;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
a {
font-weight: 500;
color: #646cff;
text-decoration: inherit;
}
a:hover {
color: #535bf2;
}
body {
margin: 0;
display: flex;
place-items: center;
min-width: 320px;
min-height: 100vh;
}
h1 {
font-size: 3.2em;
line-height: 1.1;
}
button {
border-radius: 8px;
border: 1px solid transparent;
padding: 0.6em 1.2em;
font-size: 1em;
font-weight: 500;
font-family: inherit;
background-color: #1a1a1a;
cursor: pointer;
transition: border-color 0.25s;
}
button:hover {
border-color: #646cff;
}
button:focus,
button:focus-visible {
outline: 4px auto -webkit-focus-ring-color;
}
.card {
padding: 2em;
}
#app {
max-width: 1280px;
margin: 0 auto;
padding: 2rem;
text-align: center;
}
@media (prefers-color-scheme: light) {
:root {
color: #213547;
background-color: #ffffff;
}
a:hover {
color: #747bff;
}
button {
background-color: #f9f9f9;
}
}