Google chrome extension 如何在chrome.declarativeContent.PageStateMatcher中使用UrlFilter筛选带有#(哈希标记)的URL

Google chrome extension 如何在chrome.declarativeContent.PageStateMatcher中使用UrlFilter筛选带有#(哈希标记)的URL,google-chrome-extension,Google Chrome Extension,我刚刚开始构建一个chrome扩展,因为我只需要为特定的URL显示它的图标,所以我使用了。 我还使用了一个事件侦听,如果url发生更改并与我的模式匹配,则以这种方式显示图标: chrome.declarativeContent.onPageChanged.addRules([ { conditions: [ new chrome.declarativeContent.PageStateMatcher({ pageUrl: { urlContains

我刚刚开始构建一个chrome扩展,因为我只需要为特定的URL显示它的图标,所以我使用了。 我还使用了一个事件侦听,如果url发生更改并与我的模式匹配,则以这种方式显示图标:

chrome.declarativeContent.onPageChanged.addRules([
{
    conditions: [
        new chrome.declarativeContent.PageStateMatcher({
            pageUrl: { urlContains: 'https://mysite.com/mypage.html' }
        })
    ],
    actions: [ new chrome.declarativeContent.ShowPageAction() ]
}
]);
它工作得很好,但是当我想添加查询的第一个字符的过滤器时,它失败了。 我要筛选的url模式如下所示:

我尝试了以下方法,但无效:

pageUrl: { urlContains: 'https://mysite.com/mypage.html#e' }
pageUrl: { urlContains: 'https://mysite.com/mypage.html', queryPrefix: '#e' }
pageUrl: { urlContains: 'https://mysite.com/mypage.html', queryPrefix: 'e' }
我认为问题来自散列标签

有解决办法吗?

URL的
#…
部分称为“引用片段”(通常称为“哈希”)

中当前不支持引用片段,已存在此功能的错误报告:

如果确实希望根据引用片段的状态显示页面操作,那么可以使用事件而不是declarativeContent API。例如(改编自我对的回答;请参见用于测试的
manifest.json
的回答):

网络导航功能(详细信息){
var refIndex=details.url.indexOf(“#”);
var ref=refIndex>=0?details.url.slice(refIndex+1):“”;
如果(ref.indexOf('e')==0){//以e开头?显示页面操作
chrome.pageAction.show(details.tabId);
}否则{
chrome.pageAction.hide(details.tabId);
}
}
//基滤波器
变量过滤器={
网址:[{
hostEquals:'example.com'
}]
};
chrome.webNavigation.onCommitted.addListener(onWebNav,filter);
chrome.webNavigation.onHistoryStateUpdated.addListener(onWebNav,filter);
chrome.webNavigation.onReferenceFragmentUpdated.addListener(onWebNav,filter);

改为尝试
pathContains
。如果有效的话,我会把它变成一个答案。嗨,Xan,谢谢你的快速回答,但出于某些原因,它也不起作用。看起来它无法检查散列标签后面的内容。这有点奇怪。我会在上提交一个功能请求,看看他们有什么要说的。有没有办法避免在页面上单击链接时触发操作?(这是我找到的唯一相关答案)。我正在用
PageStateMatcher
测试
规则
,其中包括
pathEquals:'/menu'
。内部页面链接修改URL(例如:/menu#settings),这会导致再次注入我的所有脚本。@在脚本中,请在继续之前检查是否存在全局变量,然后设置此全局变量以确保脚本运行一次。谢谢,我看到了该选项,但我想知道我是否遗漏了一些关于
规则的内容(
:)