fef*_*efe 4 windows electron vue-component vuejs2
我正在为我的电子应用程序使用 vue-cli-plugin-electron-builder,我试图弄清楚如何在新窗口中打开一个组件,这实际上是一个视频播放器。场景如下:
我有一个带有开始和结束时间戳的电影对话列表。当我点击每行的开始时间戳时,新窗口应该打开并且视频播放器应该开始。
在这种状态下,我可以打开一个新窗口,如下所示:
import { remote } from "electron";
export default {
methods: {
startVideo(id, startTimestamp) {
// eslint-disable-next-line no-console
console.log(id);
// eslint-disable-next-line no-console
console.log(startTimestamp);
let videoPlayerWindow = new remote.BrowserWindow({
show: true,
width: 1440,
height: 900,
webPreferences: { plugins: true }
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在这种情况下注入视频播放器子组件。
我做了类似的事情,所以我应该能够让你走上正确的道路。你可能只需要填补一些空白
所以在你vue.config.js添加
module.exports = {
//...
pages: {
index: 'src/main.js', // your main window
video_player: 'src/video_player/main.js' // your video window
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的示例组件src/video_player/main.js(这是您加载视频播放器组件的位置)
import Vue from 'vue'
Vue.config.productionTip = false
const ipc = require('electron').ipcRenderer;
new Vue({
render: h => h('div', 'This is your video player, use a component here instead')
}).$mount('#app')
// listen for data from the main process if you want to, put this in your component if necessary
ipc.on('data', (event, data) => {
// use data
})
Run Code Online (Sandbox Code Playgroud)
现在在您的主进程中,或者src/background.js您将需要添加一个事件侦听器以从渲染器进程打开窗口。
import { app, protocol, BrowserWindow, ipcMain } from 'electron' // import ipcMain
...
// create the listener
ipcMain.on('load-video-window', (event, data) => {
// create the window
let video_player = new BrowserWindow({ show: true,
width: 1440,
height: 900,
webPreferences: {
nodeIntegration: true,
plugins: true
} })
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
video_player.loadURL(process.env.WEBPACK_DEV_SERVER_URL + 'video_player.html')
if (!process.env.IS_TEST) video_player.webContents.openDevTools()
} else {
video_player.loadURL(`app://./video_player`)
}
video_player.on('closed', () => {
video_player = null
})
// here we can send the data to the new window
video_player.webContents.on('did-finish-load', () => {
video_player.webContents.send('data', data);
});
});
Run Code Online (Sandbox Code Playgroud)
最后,在您的渲染器进程中,发出打开窗口的事件
import { ipcRenderer } from "electron"
export default {
methods: {
startVideo(id, startTimestamp) {
// eslint-disable-next-line no-console
console.log(id);
// eslint-disable-next-line no-console
console.log(startTimestamp);
let data = {id, startTimestamp}
// emit the event
ipcRenderer.send('load-video-window', data);
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望这有帮助。
Noah Klayman 在这里做了一个完整的例子https://github.com/nklayman/electron-multipage-example。
你只需要适应。
| 归档时间: |
|
| 查看次数: |
678 次 |
| 最近记录: |