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 に答える