【发布时间】:2021-05-17 21:47:04
【问题描述】:
我正在开发我的第一个 Google Chrome 扩展程序。我想根据用户可以在我的扩展程序的选项页面上选择的选项向(所有)http(s) 请求添加自定义标头。
我成功管理了以下内容:
- 为所有 http 请求手动添加自定义标头
- 创建选项页面
- chrome.storage.sync 中的保存和恢复选项
现在我正在努力将上述内容结合起来。这是我尝试过的:
chrome.webRequest.onBeforeSendHeaders.addListener(function(details){
var demoOptions = new Array();
var demoHeader = '';
var bkg = chrome.extension.getBackgroundPage(); // for debugging
chrome.storage.sync.get({
demoOption: true,
}, function(items) {
if(items.demoOption){
demoOptions.push('demo-header-1');
}
demoHeader = demoOptions.join();
details.requestHeaders.push({
name: 'X-Demo-Header',
value: demoHeader //this is not showing up in the http headers
});
bkg.console.log('demoHeader:' + demoHeader); //this is putting the correct value to the debugging console
bkg.console.log(details.requestHeaders); //this is putting the headers to the debugging console, incl. x-demo-header1 and x-demo-header2 (see below)
});
details.requestHeaders.push({
name: 'X-Demo-Header2',
value: 'Demo-Header-2' //this is correctly added to the headers and included in the request
});
return { requestHeaders: details.requestHeaders };
},
{urls: [ "*://*/*" ]},['requestHeaders','blocking']);
观察:
- X-Demo-Header2 已正确插入(在 Chrome 标头检查和调试控制台中可见)
- x-demo-header1 不是发送到站点的标头的一部分,但在调试输出中可见
- x-demo-header2 在标头中 before X-Demo-Header1 在控制台标头数组中(见截图)
假设:获取我的选项的函数(项目)是异步执行的,并且在插入我的选项的标头之前返回 requestHeaders。
我可以避免这种情况吗?有没有更好的选项来根据选项添加标题?
截图:
【问题讨论】:
标签: javascript google-chrome google-chrome-extension