OnHistoryStateUpdated 过滤器未按预期工作
OnHistoryStateUpdated filter not working as expected
我正在开发一个 Firefox 插件,我想在其中添加一个 pageAction when you are watching a video in YouTube. My 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 link 时发生,因为当您从第一次点击转到另一个 YouTube 页面时,它消失。
类似于:
- 打开新标签页
- 直接转到 www.youtube.com(没有出现)
- 按任意视频(按预期出现)
- 按任何其他 link 到 YouTube 页面(主要、历史、频道)(它还在那里,应该不会消失?)
- 再次按任何其他link不同于视频(它最终消失)
我想在 showPageAction 函数中添加一个过滤器,但是 onHistoryStateUpdated 的过滤器不应该这样做吗?
过滤器按预期工作;这是默认的重置行为,不会。
基于历史状态更新的导航的要点是没有实际 导航发生(与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
);
我正在开发一个 Firefox 插件,我想在其中添加一个 pageAction when you are watching a video in YouTube. My 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 link 时发生,因为当您从第一次点击转到另一个 YouTube 页面时,它消失。 类似于:
- 打开新标签页
- 直接转到 www.youtube.com(没有出现)
- 按任意视频(按预期出现)
- 按任何其他 link 到 YouTube 页面(主要、历史、频道)(它还在那里,应该不会消失?)
- 再次按任何其他link不同于视频(它最终消失)
我想在 showPageAction 函数中添加一个过滤器,但是 onHistoryStateUpdated 的过滤器不应该这样做吗?
过滤器按预期工作;这是默认的重置行为,不会。
基于历史状态更新的导航的要点是没有实际 导航发生(与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
);