问题描述
我成功地从 Service Worker 后台脚本向社交 OAuth 提供者启动了 webauthflow(根据 manifest v3 要求,后台脚本现在是成熟的 Service Worker)
但是,在最简单的情况下,我无法将消息发送回我的内容脚本。
这是我的 Service Worker (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(...) 输出。我添加了一个警报,它触发得很好。