(电子)BrowserWindow的baseURLForDataURL选项会有什么期望?

时间:2019-01-11 22:13:26

标签: electron data-uri

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

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

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

它是否期望绝对路径(如上述示例所示)?

1 个答案:

答案 0 :(得分:0)

通常会期待

'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("\\", "/")}/`
  });
});