繁体   English   中英

在Google Chrome扩展程序API中隐藏带有declarativeContent的pageAction

[英]Hide pageAction with declarativeContent in Google Chrome extension API

这是我第一次制作Chrome扩展程序,老实说,我对JS不太熟悉。

  • 我想使用persistent: falsedeclarativeContentpageStateMatcher API调用和权限,而不是使用选项卡和/或在原始JS上完全pageStateMatcher如果可以的话)。
  • 当URL包含除二级域名以外的任何内容时,我需要显示pageAction图标,但co.uk之类的外来pageAction除外:

    ☐google.com— 2lvl域
    ☐bbc.co.uk—等同于2lvl域的异国3lvl域
    ☑images.google.com— 3lvl域
    ☑google.com/ search-具有路径的2lvl域
    ☑news.bbc.co.uk—等同于3lvl域的异国4lvl域
    ☑bbc.co.uk/ article —具有路径的等效3lvl域等于具有路径的2lvl域

  • 我需要为上述情况的相反方向隐藏pageAction

  • 我需要通过单击pageAction进行的操作来通过修剪除第二级域以外的任何内容来更新URL。

我仅在检测部分工作,打算在完成此部分后添加URL更新功能。

manifest.json

{
  // Required
  "manifest_version": 2,
  "name": "Website Home Button",
  "version": "0.1",

  // Recommended
  "description": "Icon made by Freepik from www.flaticon.com is licensed by CC BY 3.0",
  "icons": {
    "48": "icon48.png",
    "128": "icon128.png"
  },
  // PageAction
  "page_action": {
    "default_icon": {
      "19": "icon19.png",
      "38": "icon38.png"
    },
    "default_title": "Website Home Button" //Tooltip
  },

  // Optional
  "author": "Murad 'Erquint' Beybalaev",
  "background": {
    "scripts": ["background.js"],
    // Recommended
    "persistent": false
  },
  "minimum_chrome_version": "18",
  "permissions": ["declarativeContent"]
}

background.js

// Update the declarative rules on install or upgrade.
chrome.runtime.onInstalled.addListener(function() {
  chrome.declarativeContent.onPageChanged.addRules([{
    conditions: [
      // URL is not a 2lvl domain...
      new chrome.declarativeContent.PageStateMatcher(
        {
          pageUrl: {urlMatches: "[^.]+?\..+?(\.|\/).*"}
        }
      ),
      //Hostname is not a 3lvl .uk domain
      !(new chrome.declarativeContent.PageStateMatcher(
        {
          pageUrl: {hostSuffix: ".uk"}
        }
      ))],
    // ... show the page action.
    actions: [new chrome.declarativeContent.ShowPageAction() ]
  }]);
});

//[^.]+?\..+?(\.(?!uk)|\/).*
//(?<=\.)(.+?\..+)

在底部,您可以看到我将用于检测和修整的正则表达式,但是pageStateMatcher使用RE2进行正则表达式,并且它不支持环视(整个API对我来说适得其反),所以我决定使用hostSuffix条件结合在一起,但为了上帝的爱,我不明白如何在这些条件下工作。

如果要遵循RE2约束,我需要的逻辑是(伪代码)

if(
//URL contains more than just a 2nd-level domain
urlMatchRegExp("[^.]+?\..+?(\.|\/).*")
//AND URL isn't an exotic .uk 3rd-level domain.
&& !urlMatchRegExp("([^.]+?\.){2}uk"))
  {pageAction.show}
else
  {pageAction.hide}

我如何嵌套/ &&条件?
我该怎么办 条件?
条件或事件似乎不是布尔值,因此逻辑运算符似乎对它们不起作用。
我应该放弃API并使用JS RegExp吗?
是否可以在没有制表符权限的情况下更新URL?

我很茫然。
任何指导将不胜感激。

聚苯乙烯
我只是尝试将此规则集与功能更强大的RegExp结合使用,但仍然没有环顾四周:

[{
    conditions: [
      //URL is not a 2lvl domain...
      new chrome.declarativeContent.PageStateMatcher(
        {
          pageUrl: {urlMatches: "^[^.]+?\..+?(\.[^uk]|\/).*$"}
        }
      )],
    // ... show the page action.
    actions: [new chrome.declarativeContent.ShowPageAction() ]
  },{
    conditions: [
      //URL is not a 2lvl domain...
      new chrome.declarativeContent.PageStateMatcher(
        {
          pageUrl: {urlMatches: "^[^.]+?\.[^\.|\/]+?(\.uk)??$"}
        }
      )],
    // ... show the page action.
    actions: [new chrome.declarativeContent.HidePageAction() ]
  }]

但是事实证明没有chrome.declarativeContent.HidePageAction()

不满足条件时是否应该自动隐藏?
我们试试吧。
嗯,事实并非如此。
我正在尝试上面的无隐藏规则,并且在任一规则上都显示

example.com
www.example.com
example.com/index.html
www.example.com/index.html

而不管。
到处都是永久的。
尽管没有隐藏规则,调试中也没有错误。

PPS Kinda按照Google的模板重写了整个过程:
background.js

chrome.runtime.onInstalled.addListener(function() {
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([
      {
        conditions: [
          new chrome.declarativeContent.PageStateMatcher({
            pageUrl:  {urlMatches: "^[^.]+?\..+?(\.[^uk]|\/).*$"},
          })
        ],
        actions: [ new chrome.declarativeContent.ShowPageAction() ]
      }
    ]);
  });
});

仍然得到所有可能的假阳性。

聚苯硫醚
RE2太烂了!
我将尝试使用更多JS的tabs

RE2被证明是功能失调的灾难。
某些Chrome API被证明是适得其反。

使用tabs权限可以提高JS的灵活性,并且与纯API(+ RE2)相比,它实际上可以工作。
无论如何都解决了环视问题-它们是“常规”正则表达式的有力补充,但强大的功能带来了巨大的责任。
基本扩展功能已经到位。
计划“异国情调”域名和一些令人眼花dy乱的调整。

感谢@Xan提供的信息和建议。
如果有人对这个小项目感到好奇,可以在https://bitbucket.org/Erquint/website_home_button_extension_for_chrome中查看

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM