我正在开发一个Firefox附加组件,我想在YouTube上观看视频时添加pageAction。我的background script效果很好,直到您从YouTube视频转到任何其他YouTube页面,pageAction不会消失。这是我的代码:
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页面时,它就会消失。 类似的东西:
我想在showPageAction函数中添加一个过滤器,但是,不是onHistoryStateUpdated的过滤器应该这样做吗?
答案 0 :(得分: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
);