Я не уверен, что это сработает, но стоит попробовать.
Вы можете настроить цикл while, который будет удерживать возврат, пока ваши исполняемые скрипты не вернут сообщение через Передача сообщений ,Кроме того, вам нужно будет использовать разрешение webRequestBlocking
в своем манифесте (которое, вероятно, у вас уже есть).
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
var holdReturn = false;
for (var i = 0; i < details.requestHeaders.length; ++i) {
if (details.requestHeaders[i].name === 'User-Agent') {
holdReturn = true;
chrome.extension.onRequest.addListener(
function(request, sender, sendResponse) {
if (request.userAgentOverride) {
details.requestHeaders[i].value = request.userAgentOverride;
holdReturn = false;
}
});
chrome.tabs.executeScript(details.tabId,{file: "user-agent-dialog.js"});
break;
}
}
while (holdReturn) {
// waiting...
}
return {requestHeaders: details.requestHeaders};
},
{urls: ["http://*/*"], types: ["main_frame"]},
["blocking", "requestHeaders"]);
Файл user-agent-dialog.js
будет иметь:
function onFormSubmit() {
chrome.extension.sendRequest(null, {
userAgentOverride: userAgentValueFromInput
});
}
// code to create the dialog and form, this will call
// onFormSubmit() when the form is submitted to send a
// message back to the background page.