0

我正在pageAction为特定站点开发一个 Chrome 扩展程序。我想将我的扩展程序转换为使用事件页面而不是背景页面。

我发现预渲染的页面在我读到的用于显示它们的建议方法中滑倒了。我能找到pageAction在预渲染页面上进行显示的唯一方法是监听chrome.webNavigation.onTabReplaced事件,并另外显示pageAction替换 url 是否正确。由于此事件的侦听器不支持过滤器,因此在每次预渲染时都会调用我的侦听器,因此如果它是事件页面就会被唤醒。

pageAction在预渲染页面的情况下,是否有其他方法可以确保我的节目?

4

1 回答 1

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);
  }
  });
于 2013-01-22T19:20:23.017 回答