如何在Chrome扩展程序中将URL与片段标识符匹配?

时间:2017-08-29 07:06:54

标签: javascript regex google-chrome google-chrome-extension fragment-identifier

我正在尝试使用以下代码来区分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。

有没有办法在这里识别这两个网址?

谢谢!

1 个答案:

答案 0 :(得分:0)

我担心declarativeContent API无法满足您的要求。

您应该探索其他选项,例如注入content script并从那里检查页面的状态;然后,您可以向后台脚本发送消息以启用/禁用页面操作。

作为一种不同的方法,您可以处理webNavigation API个事件以跟踪网址更改并相应地更新网页操作可见性。

请注意,当页面在这些状态之间转换时,可能不会发生实际导航(而是发生历史状态更改);在这种情况下,您需要明确隐藏您的页面操作。