2017-08-18 170 views
2

我正在使用Firefox附加組件,當您在YouTube上觀看視頻時,我想添加一個pageAction。我的background script運行良好,直到您從YouTube視頻轉到任何其他YouTube頁面,pageAction不會消失。這是我的代碼:OnHistoryStateUpdated過濾器無法正常工作

var filter = { 
    url:[ 
    { 
     pathContains: "watch", 
     hostSuffix: "youtube.com" 
    } 
    ] 
} 
function showPageAction(details) { 
    browser.pageAction.show(details.tabId); 
} 

browser.webNavigation.onCommitted.addListener(showPageAction, filter); 
browser.webNavigation.onHistoryStateUpdated.addListener(showPageAction, filter); 

它只是發生在您第一次按從YouTube視頻頁面(歷史,主要,通道等),其他任何YouTube鏈接,因爲當你去到另一個YouTube頁面從第一點擊,它消失。 喜歡的東西:

  1. 打開新的標籤頁
  2. 直接轉到www.youtube.com(doesn't出現)
  3. 按任意視頻(它的出現,如預期)
  4. 按任意鏈接到YouTube頁面(主,歷史,一個燭)(它仍然存在,shoudn't消失?)
  5. 再次按從視頻不同的任何其他環節(它終於消失)

我想在showPageAction函數中添加一個過濾器,但是,是不是onHistoryStateUpdated過濾器應該這樣做?

回答

0

該過濾器按預期工作;這是默認的重置行爲。

基於歷史狀態更新點的導航是,沒有實際導航發生(不像onCommitted事件)。這意味着FF不會自動隱藏它。

這意味着您必須在導致非觀看頁面的導航中處理它。

你最好在聽衆中篩選:

// Since history manipulation must preserve origin, 
// you can limit to YouTube domains for performance 
const hostFilter = { 
    url: [{hostSuffix: "youtube.com"}] 
} 

function updatePageAction(details) { 
    if (details.url.includes("watch")) { 
    browser.pageAction.show(details.tabId); 
    } else { 
    browser.pageAction.hide(details.tabId); 
    } 
} 

browser.webNavigation.onHistoryStateUpdated.addListener(
    updatePageAction, 
    hostFilter 
); 
+1

我並沒有真正得到了解釋,對不起(英語不是我的第一語言)。但是,只要改變,代碼就可以很好地工作。 我嘗試使用包含,它沒有工作,根據[onHistoryUpdate](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webNavigation/onHistoryStateUpdated)docs,url是一個字符串;並且string中沒有'contains'方法,但'includes'具有相同的結果。 有了這個改變,你甚至不需要onCommitted事件。 –

相關問題