回避策とおそらくより良い解決策を見つけることができました。現在、可視性の状態を検出するために html5 API を使用しています。表示されている場合は、backgroundPage にメッセージを送信して pageAction を表示します。これにより、pageAction を表示するために持っていた他のすべてのコードが効果的に置き換えられました。
うまくいけば、これは他の人を助けるでしょう。
//contentScript.js
//This sections is to handle when we want to display the pageAction icon
function handleVisibilityChange(){
if (!document.webkitHidden){
//the page is now visible and is therefore not prerendering or in the background
chrome.extension.sendMessage({message: "pageLoaded", userLoggedIn: loggedIn()}, function(response) {
console.log(response.farewell);});
}
}
document.addEventListener("webkitvisibilitychange", handleVisibilityChange, false);
//Call the function incase the document is already visible/
handleVisibilityChange();
//backgroundPage.js
chrome.extension.onMessage.addListener(
function(request, sender, sendResponse){
if (request.message == "pageLoaded"){
sendResponse({farewell: "goodbye"}); //close the connection.
console.log('detected page load');
if(request.userLoggedIn == true){
//Show regularPageAction
console.log('user logged in so showing pageaction normal');
chrome.pageAction.setPopup({tabId: sender.tab.id, popup: "popup.html"});
}
else{
//show non logged in page action.
console.log('user now logged in so showing pageaction non normal');
chrome.pageAction.setPopup({tabId: sender.tab.id, popup: "notLoggedIn.html"});
}
chrome.pageAction.show(sender.tab.id);
}
});