首页 > 解决方案 > (Electron) BrowserWindow 的 baseURLForDataURL 选项期望什么?

问题描述

我正在从 data-uri 加载一个窗口:

pref.loadURL('data:text/html;charset=utf-8,' + encodeURI(str), { baseURLForDataURL: 'file://' + app.getAppPath() } );

好消息是,开发工具控制台现在显示了应该加载但没有加载的 css/js 文件的错误,但我无法理解它的预期。任何地方都没有示例,甚至在启发此选项的 github 问题中也没有。

它是否需要绝对路径(如我上面的示例)?

标签: electrondata-uri

解决方案


它通常会期望

'file://' + app.getAppPath().replace("\\", "/") + "/"

但目前,似乎存在一个问题,至少在使用协议“file://”时我们会收到错误。(https://github.com/electron/electron/issues/20700

解决此问题的一种方法是生成自定义文件协议。

const { app, BrowserWindow, screen, protocol  } = require('electron');
const path = require('path');

app.on('ready', () => {
  const customProtocol = 'file2';

  protocol.registerFileProtocol(customProtocol, (request, callback) => {
    const url = request.url.substr(customProtocol.length + 2);
    const file = { path: path.normalize(`${__dirname}/${url}`) }
    callback(file)
  });
  
  let win = new BrowserWindow({
    webPreferences: {
      nodeIntegration: true,
      contextIsolation: true
    }
  });
    
  win.loadURL(`data:text/html;charset=UTF-8,${encodeURIComponent(indexHTML)}`, {
    baseURLForDataURL: `${customProtocol}://${app.getAppPath().replace("\\", "/")}/`
  });
});

推荐阅读