【问题标题】:Run a specified function when the user opens a new tab in Chromium当用户在 Chromium 中打开新选项卡时运行指定函数
【发布时间】:2016-08-15 00:41:03
【问题描述】:

我想从 Chromium 的“新标签”页面中删除访问量最大的缩略图。在检查了该页面的内容后,我确定以下 JavaScript 行可以解决问题:

document.getElementById("most-visited").remove();

但是我还有一个问题:当我打开一个新标签时,如何使这一行自动运行?大概我必须将它包装在一个函数中并注册一个事件处理程序,但我一直无法找到更准确的信息。


编辑:

Chromium 似乎明确防止篡改“新标签”页面。我通过进行以下更改来调试 Haibara Ai 的解决方案:

  1. 在 manifest.json 中:

    "matches": [
        "*://*/*"
      ],
    
  2. 在 content.js 中:

    var mv = document.getElementById("most-visited");
    if (mv) mv.remove(); else window.alert("test");
    

并重新加载了扩展程序。当我打开一个新标签时,缩略图仍然出现。然而,当我刷新另一个页面时,会显示一个显示“测试”的消息框。

【问题讨论】:

  • 使用内容脚本并让它在每个页面上运行,无需监听器
  • @Daniel_L:感谢您的指点,会查找更多信息。
  • 我认为 chrome 扩展和用户脚本无法访问新页面之类的东西...(虽然它确实有一个 URL,你可以通过在控制台中运行 window.location 找到它)

标签: javascript google-chrome-extension google-chrome-devtools chromium


【解决方案1】:
  1. 使用Content scripts。至于匹配newtab url,见What is the URL of the google chrome new tab page and how to exclude it from manifest.json

    manifest.json

    {
      "name": "Redesign",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "*://*/_/chrome/newtab*"
          ],
          "js": [
            "content.js"
          ]
        }
      ]
    }
    

    content.js

    document.getElementById("most-visited").remove();
    
  2. 使用Programmatic injection。可以通过chrome.tabs.onCreated监听新标签打开事件,查看标签url,判断是否调用chrome.tabs.executeScript

  3. Customize new tab page。您还可以自定义自己的新标签页,而无需访问最多的部分。

【讨论】:

  • 感谢您的回答,您的第一个选择似乎触及了技术问题的核心。不幸的是,它仍然没有解决我最初的需求,因为 Chromium 本身显然可以防止篡改“新标签”页面。
  • @pyon,它对我来说效果很好。让我看看可能导致不同行为的原因。
  • @pyon,如果你去 devtools Sources->Content scripts 面板,你能看到你的内容脚本吗?
  • 当我浏览任何普通页面(比如 Stack Overflow)时,是的。当我在“新标签”页面时,没有。
  • @pyon,很奇怪,我可以在 newtab 页面和普通页面上看到它
猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 2013-06-18
  • 2013-02-10
  • 2020-02-02
  • 1970-01-01
  • 2020-09-02
  • 2012-04-25
  • 2020-05-29
相关资源
最近更新 更多