URL访问提示

Prompt on URL visit

本文关键字:提示 访问 URL      更新时间:2023-09-26

我是Javascript和Chrome扩展的新手,我正在开发一个当用户访问某个网页时触发提示的扩展,但当用户访问该网页时不会提示。

下面是重现这个问题的简化版本:

chrome.tabs.query({'active': true, 'lastFocusedWindow': true}, function (tabs) {
    var url = tabs[0].url;
    if (url === "example.com") {
    confirm("You are visiting " + URL);
    }
});

我希望这样做是触发提示当用户访问'Example.com',但我认为我误解了Chrome如何从活动选项卡中提取URL,也许事件是如何触发的…

任何提示都很感激。

在你的回答中,你引用了这个问题,但你从一堆答案中选择了一个奇怪的答案。

不要自己检测页面加载,最好依靠Chrome的内容脚本机制,这将确保您的脚本在加载请求网页的每个选项卡中执行。

  1. 如果您提前知道网页列表,您可以在清单中根据它们进行过滤:

    "content_scripts" : [{
      "matches": ["*://*.example1.com/*", "*://*.example2.com/"],
      "js": ["confirm.js"]
    }],
    

    然后输入confirm.js:

    confirm("You are visiting " + location.href);
    

    这将是非常有效的,因为Chrome将为您本地过滤请求

  2. 如果你事先不知道网页列表,你可以在每个页面上使用一个内容脚本,并在你的代码中过滤它:

    "content_scripts" : [{
      "matches": ["*://*/*"],
      "js": ["confirm.js"]
    }],
    

    和confirm.js (skeleton):

    chrome.storage.local.get("hostFilterData", function(data){
      if( checkUrl(location.host, data.hostFilterData) ) {
        confirm("You are visiting " + location.href);
      }
    });
    function checkUrl(location.host, filterData){
      /* your logic goes here */
    }
    

如果你想让JS在尽可能早的时间运行,你可能还想添加"run_at" : "document_start"


如果你真的想让你的逻辑在后台页面,你可以听各种事件。由changeInfo.status == 'complete'过滤的chrome.tabs.onUpdated应该在大多数情况下工作,但可能并不总是一个好主意。如果页面有加载缓慢的资源,它会很晚才触发,如果页面使用基于锚点的导航(您可能不希望这样),它可能会再次触发。即使采用这种方法,在此之后执行选项卡查询也没有什么意义,因为事件包含触发它的页面的选项卡ID。

还有chrome.webNavigation API提供相关事件

尝试更改

if(url === "example.com")

如果(url = = = " example.com " | | url = = = " http://example.com " | | url = = = " https://example.com ")