Electron: 怎样在BrowserWindow直接加载一个JS文件呢

发布于 2022-09-12 13:20:34 字数 1532 浏览 16 评论 0

我想直接用BrowserWindow加载一个js文件(这是一个隐藏窗口,不用开启UI界面),而不是先加载html文件然后在其中声明<script>标记来运行一段脚本,可以实现吗?

BrowserWindow里面有个相关属性preload,就是预加载脚本,但好像不调用window.loadURLwindow.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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

痴情换悲伤 2022-09-19 13:20:34

问题解决方法:BrowserService.class

没有使用preload脚本方案,因为感觉不太灵活,不能调试脚本,且创建BrowserWindow时必须覆盖默认preload属性。继承重写了BrowserWindow的部分实例方法和构造函数逻辑,使用了dataURL 脚本注入来加载js文件。

盗梦空间 2022-09-19 13:20:34

BrowserWindow中有个webContents属性,webContents中有个executeJavaScript函数,
他接受一段脚本内容,返回一个Promise,代表着执行的结果。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文