我正在为特定网站开发一个pageAction
的Chrome扩展程序。我想将我的扩展名转换为使用事件页面而不是后台页面。
我发现预渲染页面正在浏览我读到的用于显示它们的建议方法。我可以找到在预渲染页面上进行pageAction
展示的唯一方法是收听chrome.webNavigation.onTabReplaced
事件,并在替换网址正确的情况下另外显示pageAction
。由于此事件的侦听器不支持过滤器,因此在每个预渲染时都会调用我的侦听器,因此如果它是事件页面则会被唤醒。
在预渲染页面的情况下,是否有另一种方法可以确保我的pageAction
显示?
答案 0 :(得分:0)
我能够找到一种解决方法,也许是更好的解决方案。我现在使用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);
}
});