我想拦截某些HTTP请求并将其替换为文件。所以我想我可以像这样使用electron.protocol.interceptFileProtocol
:
protocol.interceptFileProtocol('http', (request, callback) => {
// intercept only requests to "http://example.com"
if (request.url.startsWith("http://example.com")) {
callback("/path/to/file")
}
// otherwise, let the HTTP request behave like normal.
// But how?
})
我们如何允许http
以外的其他http://example.com
个请求继续正常工作?
答案 0 :(得分:1)
不确定是否有办法完全做到这一点?但是我做了类似的事情,就是使用session.defaultSession.webRequest.onBeforeRequest
参见:https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest
类似
session.defaultSession.webRequest.onBeforeRequest({urls: ['http://example.com']}, function(details, callback) {
callback({
redirectURL: 'file://' + this.getUrl(details.url)
});
});
如果您不仅需要重定向,还可以重定向到您自己的自定义协议(例如,像mycustomprotocol://...
这样的URL)。您可以使用protocol.registerStringProtocol
等实现自己的协议处理程序。
到目前为止,我在电子中分别使用onBeforeRequest和registerStringProtocol都没有问题,但从来没有一起使用过-尽管我是乔治,但应该一起工作。
答案 1 :(得分:1)
使用protocol.interceptXXXXProtocol(scheme, handler)
时,我们正在拦截方案协议,并将处理程序用作协议的新处理程序,如in the doc here所述,该处理程序发送新的XXXX请求作为响应。
但是,这样做完全破坏了此特定协议的初始处理程序,这是我们在处理回调执行后所需的。因此,我们只需要将其恢复到其初始状态,即可继续正常工作:)
让我们使用:protocol.uninterceptProptocol(scheme)
protocol.interceptFileProtocol('http', (request, callback) => {
// intercept only requests to "http://example.com"
if (request.url.startsWith("http://example.com")) {
callback("/path/to/file")
}
// otherwise, let the HTTP request behave like normal.
protocol.uninterceptProtocol('http');
})