无法使用 Manifest V3 将消息响应发送回 Chrome 扩展中的内容脚本
Unable to send message response back to content script in Chrome Extension using Manifest V3
我成功地从服务工作者后台脚本向社交 OAuth 提供者启动了 webauthflow(根据清单 v3 要求,后台脚本现在是成熟的服务工作者)
但是,在最简单的情况下,我无法将消息发送回我的内容脚本。
这是我的服务人员 (background.js)
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.message === "login") {
if (user_signed_in) {
console.log("already signed in");
} else {
chrome.identity.launchWebAuthFlow({
url: createOAuthEndpoint(),
interactive: true,
}, function (redirect_uri) {
if (chrome.runtime.lastError) {
sendResponse({
message: "fail"
});
} else {
if (redirect_uri.includes("error")) {
sendResponse({
message: "fail"
});
} else {
//we get here but this message is never sent
sendResponse({
message: "success",
profile: "blah"
});
}
}
});
}
}
return true;
});
这是我的内容脚本...(popupsignin.js)
document.querySelector('#sign-in').addEventListener('click', () => {
chrome.runtime.sendMessage({ message: 'login' }, (response) => {
console.log('got the response'); //this log is never written
if (response.message === 'success'){
console.log(response.profile);
}
});
});
事实证明代码没有任何问题。由于某种原因,我无处可读回调方法中的 console.log(...) 输出。我添加了一个警报,它触发得很好。
我成功地从服务工作者后台脚本向社交 OAuth 提供者启动了 webauthflow(根据清单 v3 要求,后台脚本现在是成熟的服务工作者)
但是,在最简单的情况下,我无法将消息发送回我的内容脚本。
这是我的服务人员 (background.js)
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.message === "login") {
if (user_signed_in) {
console.log("already signed in");
} else {
chrome.identity.launchWebAuthFlow({
url: createOAuthEndpoint(),
interactive: true,
}, function (redirect_uri) {
if (chrome.runtime.lastError) {
sendResponse({
message: "fail"
});
} else {
if (redirect_uri.includes("error")) {
sendResponse({
message: "fail"
});
} else {
//we get here but this message is never sent
sendResponse({
message: "success",
profile: "blah"
});
}
}
});
}
}
return true;
});
这是我的内容脚本...(popupsignin.js)
document.querySelector('#sign-in').addEventListener('click', () => {
chrome.runtime.sendMessage({ message: 'login' }, (response) => {
console.log('got the response'); //this log is never written
if (response.message === 'success'){
console.log(response.profile);
}
});
});
事实证明代码没有任何问题。由于某种原因,我无处可读回调方法中的 console.log(...) 输出。我添加了一个警报,它触发得很好。