我正在尝试使用以下代码来区分vSphere登录页面的URL和工作页面。
vSphere登录页面的URL如下所示:
https://0.0.0.0/vsphere-client/?csp
登录后的工作页面如下所示:
https://0.0.0.0/vsphere-client/?csp#extensionId%3Dvsphere.core.controlcenter.shortcutsView
所以,我想在登录页面上显示我的扩展图标,而不是在工作页面上显示。
我尝试了以下代码,但它没有用,我的意思是这两个网址上有图标:
chrome.runtime.onInstalled.addListener(function () {
chrome.declarativeContent.onPageChanged.removeRules(undefined, function () {
chrome.declarativeContent.onPageChanged.addRules([
{
conditions: [
new chrome.declarativeContent.PageStateMatcher({
pageUrl: { querySuffix: 'csp' },
})
],
actions: [new chrome.declarativeContent.ShowPageAction()]
}
]);
});
});
对于这一行:
pageUrl: { querySuffix: 'csp' },
我还尝试使用$
将正则表达式移到URL的末尾并且无法正常工作:
pageUrl: { urlMatches: 'csp$' },
我知道片段标识符#
之后的部分不会在pageUrl: { xxx },
处理,请参阅https://developer.chrome.com/extensions/events#property-UrlFilter-hostEquals。
它说:
如果网址(没有片段标识符)与指定的匹配,则匹配 正则表达式。如果是,则会从URL中删除端口号 匹配默认端口号。正则表达式使用RE2 语法。
因此,也许pageUrl
将登录页面和工作页面视为相同的URL。
有没有办法在这里识别这两个网址?
谢谢!
答案 0 :(得分:0)
我担心declarativeContent
API无法满足您的要求。
您应该探索其他选项,例如注入content script并从那里检查页面的状态;然后,您可以向后台脚本发送消息以启用/禁用页面操作。
作为一种不同的方法,您可以处理webNavigation
API个事件以跟踪网址更改并相应地更新网页操作可见性。
请注意,当页面在这些状态之间转换时,可能不会发生实际导航(而是发生历史状态更改);在这种情况下,您需要明确隐藏您的页面操作。