如何拦截对文件的请求并将其更改为http协议?

时间:2018-05-17 01:37:52

标签: electron

在Electron中,是否可以拦截对file:///的请求并将它们重定向到http?

我已经检查了电子protocol页面,但如果支持与否则不明显。

2 个答案:

答案 0 :(得分:0)

您可以使用protocol.registerHttpProtocol与方案file:拦截const {app, protocol} = require('electron') const path = require('path') app.on('ready', () => { protocol.registerHttpProtocol('file', (request, callback) => { const url = request.url.substr(8) callback({url: 'http://example.com/' + url)}) }, (error) => { if (error) console.error('Failed to register protocol') }) }) 个请求,而不是发出HTTP请求。

示例(未经测试):

{{1}}

注意:此示例可能需要精炼,因为文件路径可能包含驱动器号,这对于HTTP请求无效。

答案 1 :(得分:0)

还有另一种方式可以解决这个问题,有趣的是,问题中的“拦截”一词与之有很大关系:)

可以使用的协议对象上有一个函数interceptHttpProtocol()

示例代码:

app.on("ready", () => {
    protocol.interceptHttpProtocol("http", function(request, callback) {
    var parsedUri = url.parse(request.url);

    var filePath = path.join(__dirname, parsedUri.pathname);
    request.url = "file://" + filePath; 

    callback(request);
  });

  var mainWindow = new BrowserWindow();

  mainWindow.loadURL("http://localhost/index.html");
});

希望有帮助