Electron: 怎样在BrowserWindow直接加载一个JS文件呢
我想直接用BrowserWindow加载一个js文件(这是一个隐藏窗口,不用开启UI界面),而不是先加载html文件然后在其中声明<script>
标记来运行一段脚本,可以实现吗?
BrowserWindow里面有个相关属性preload
,就是预加载脚本,但好像不调用window.loadURL
或window.loadFile
就不能直接使用:
new BrowserWindow({
width,
height,
show: false,
center: true,
minWidth: 800,
minHeight: 600,
title: 'electronux',
autoHideMenuBar: true,
icon: path.join(app.getAppPath(), 'resources/icon.png'),
webPreferences: {
nodeIntegration: true,
enableRemoteModule: true,
webviewTag: true,
preload: 'path/to/my/preload.js'
},
});
也尝试过直接window.loadURL(dataURL)
这种方式实现,但是,以dataURL的方式生成的脚本文件里加载其它外部脚本会出现路径问题:
/**
* loadView
* @param {[String]} title [标题]
* @param {[String]} script [脚本内容]
* @return {[String]}
*/
exports.loadView = ({ title, script, childId="" }) => {
const htmlContent = (`
<!DOCTYPE html>
<html>
<head>
<title>${title}</title>
<meta charset="UTF-8">
</head>
<script>
window.childId=${childId}
</script>
<body>
<div id="view"></div>
<script>
${script}
</script>
</body>
</html>
`);
return 'data:text/html;charset=UTF-8,' + encodeURIComponent(htmlContent);
};
window.loadURL(loadView({...}));
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题解决方法:BrowserService.class
没有使用
preload
脚本方案,因为感觉不太灵活,不能调试脚本,且创建BrowserWindow时必须覆盖默认preload
属性。继承重写了BrowserWindow的部分实例方法和构造函数逻辑,使用了dataURL
脚本注入来加载js文件。BrowserWindow中有个webContents属性,webContents中有个executeJavaScript函数,
他接受一段脚本内容,返回一个Promise,代表着执行的结果。