最近发现electron的生产环境中打包后启动,后台log一直报这个错,在网上搜索解决方案,都无疾而终,关键electron版本更新太快,关于各版本的变动也比较大,很难找到适合自己版本的解决方案,就是搜索到的很少的方案也都试过了,这个error一直出现,虽然目前没发现有明显的影响,但毕竟是个错误,谁知道会有什么坑存在,很是头疼。
Electron版本:15.5.7
Node版本:14.18.3
关于protocol的代码片断:
protocol.registerSchemesAsPrivileged([
{ scheme: 'app', privileges: { secure: true, standard: true, bypassCSP: true } },
]);
function registerLocalResourceProtocol() {
protocol.registerFileProtocol('local-resource', (request, callback) => {
const url = request.url.replace(/^local-resource:\/\//, '')
// Decode URL to prevent errors when loading filenames with UTF-8 chars or chars like "#"
const decodedUrl = decodeURI(url) // Needed in case URL contains spaces
try {
return callback(decodedUrl)
} catch (error) {
console.error('ERROR: registerLocalResourceProtocol: Could not get file path:', error)
}
});
protocol.registerFileProtocol('file', (request, callback) => {
const pathname = decodeURIComponent(request.url.replace('file:///', ''));
callback(pathname);
});
}
// baidu地图api返回值导致存在bdapi://的请求,需要自定义此Protocol用来接收处理,否则系统将弹出【需要使用新应用以打开此bdapi链接】的openwith弹窗
function registerBdapiProtocol() {
protocol.registerStringProtocol('bdapi', (request, callback) => {
const decodedUrl = decodeURI(request.url) // Needed in case URL contains spaces
console.log("bdapi:// Requested: " + decodedUrl);
try {
return callback(decodedUrl);
} catch (error) {
console.error('ERROR: registerStringProtocol: Could not get request url:', error);
}
})
}
报错信息:
[error] (node:26288) ProtocolDeprecateCallback: The callback argument of protocol module APIs is no longer needed.
注:由于官网上也没有例子,试着把callback去掉,改为Promise.resolve(decodedUrl)和Promise.reject(error),return去掉等等也不好用
希望Electron相关大神能指点迷津~感谢!!
================================================================================================
【后续】通过GPT-4.0给的各种建议,尝试后依然报同样的错误,最终告诉我可以暂时考虑忽略它 (; ̄ー ̄川
鉴于此版本的代码提示中还带有callback,暂且回退到上文的原始版本,待后续到github的electron社区发issue,官方回应后再回来更贴吧