如何拦截电子的请求并返回定制的响应?

时间:2018-02-04 08:06:14

标签: javascript html node.js electron

假设用户能够在电子应用上播放音频。

<audio id="audio" src="/resource/demo.mp3"></audio>

但文件/resource/demo.mp3不存在。它只是一个网址,我想要的是,请求可以被电子的渲染过程截获,从zip文件中提取demo.mp3并将其返回给用户,如下所示。

示例代码

const filter = "/resource/**"
electron.interceptRequest(filter, (url) => {
  const audio_name = url.split("/")[2]; // demo.mp3
  const audio_contents = extract_audio_contents_from_zip(audio_name);
  return audio_contents;
});

正如你所看到的,它就像一个Web服务器中的控制器,是否可以在电子中这样做?

1 个答案:

答案 0 :(得分:1)

我找到了实现它的方法。

main.js中写下以下代码,这是电子的主要过程。

app.on('ready' () => {
    ...
    let buffer = extractAudioContentsFromZip()
    // the protocol should be prefixed by zip, like zip://test.wav
    protocol.registerBufferProtocol('zip', (request, callback) => {
      callback({
        mimeType: 'audio',
        data: buffer
      });
    });
});

有关详细信息,请参阅https://electronjs.org/docs/api/protocol