【问题标题】:Could I make a Google Chrome extension for chrome pages (downloads, extensions etc)?我可以为 chrome 页面制作 Google Chrome 扩展(下载、扩展等)吗?
【发布时间】:2016-11-08 00:18:11
【问题描述】:

我想做一个非常简单的扩展,稍微改变下载页面的外观。更改历史页面可能也很有趣,但那是以后再说。

有没有办法做到这一点?

我尝试制作一个Content Script 扩展,在manifest.json 中使用"chrome://downloads" 作为match。 Chrome 不允许这样做,并在打包扩展程序时以错误响应。

还有其他简单的方法吗?必须简单,因为更改会很简单,因为所有chrome://页面都是用HTML、JS和CSS构建的。

编辑
在尝试了一些后台脚本之后...

我无法让chrome.tabs.executeScript 工作!我加了background.html:

chrome.browserAction.onClicked.addListener(function(tab) {
    alert(this.document.body.innerHTML);
    alert(chrome.tabs.executeScript(null, {
        code : "document.body.style.backgroundColor = 'red';"
    }));
});

我在manifest.json 中添加了这个以添加一个(不可见的)“浏览器操作按钮”:

    ,"browser_action": {
/*      "popup": "background.html",*/
        "name": "Alter page"
    }

onClicked 事件触发两个警报(第一个是background.html 的正文,第二个是undefined)。但是代码(带有document.body.style.backgroundColor = 'red'; 的字符串)没有执行!当然,像这样的扩展没有调试 =)

任何提示任何人?我试图抓住标签的window.document不是background.htmlwindow.document!)。注入的脚本(这是chrome.tabs.executeScript 应该做的)应该这样做。

PS
我从 make_page_red/manifestmake_page_red/background.html 偷东西
到目前为止我的“扩展”:http://hotblocks.nl/js/downloads.rar

编辑
我发现只用 CSS 就可以实现我想要实现的目标。我不需要注入javascript。这会让事情变得更容易吗?这使它成为可能吗? =)

【问题讨论】:

    标签: google-chrome google-chrome-extension


    【解决方案1】:

    根据this documentationchrome:// URL 是无效的方案,因此它们不会被匹配:

    匹配模式本质上是一个以允许的方案(httphttpsfileftp)开头的 URL,并且可以包含“*”字符。

    我会考虑改用override pages


    根据要求,这是我的扩展程序,至少可以在加载 chrome://downloads 时加载,尽管正如我所说,即使您知道这是您正在查看的页面,我也不认为您可以修改该页面。

    ma​​nifest.json

    {
        "name": "Test",
        "version": "0.0.1",
        "background_page": "background.html",
        "permissions": [
            "tabs"
        ]
    }
    

    background.html

    <script>
        chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab)
        {
            if (tab.status == "complete")
            {
                alert(tab.url);
                // should alert 'chrome://downloads' on that page. You can 
                // check for this url here and then do whatever you want
            }
        });
    </script>
    

    【讨论】:

    • 似乎只有bookmarks, history and newtab 可以这样覆盖...我特意在寻找downloads =(
    • 看起来此时它不是一个选项,这并不奇怪:chrome://downloads 是一个可以访问用户文件系统的特殊页面,因此它对打开自身具有不同的含义。但是我对内容脚本所说的仍然是正确的:chrome:// URL 是无效的方案。我将快速研究另一种方法,等等。
    • 我能够在 chrome://downloads 加载时触发后台脚本,但我猜如果我尝试修改该页面的内容,我仍然会遇到与以前相同的问题,因为那将依赖于内容脚本。我很高兴被证明是错误的,但现在,我要说它已被锁定。
    • 但有些扩展甚至可以将文件保存到文件系统。下载页面仅链接到文件系统上的文件(这不是那么危险!?)。问题 - 看起来 - 是将扩展程序连接到下载页面......
    • 什么扩展将文件保存到文件系统?您确定不考虑本地存储或重定向到常规托管文件吗?
    【解决方案2】:

    更新:自 Chrome 31 起,有一个扩展 API 允许访问 Chrome 的下载:https://developer.chrome.com/extensions/downloads

    还有一个 API 允许访问列出和管理其他已安装的扩展:https://developer.chrome.com/extensions/management


    (上一个答案)

    很遗憾,目前没有用于 Chrome 扩展程序的 API 来访问有关用户下载的信息。不过,这是一个被广泛要求的功能,Chrome 开发人员在这里进行了一些讨论:http://code.google.com/p/chromium/issues/detail?id=12133

    如果您希望看到某个功能,请在此问题上加注星标,您将收到电子邮件更新。

    【讨论】:

      【解决方案3】:

      As this page shows, there is no API to override the downloads page... 但是,有一种方法可以让您制作的文件在 chrome://downloads/ 页面使用 background page... 中的 javascript 加载时替换它...

      chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
        if(changeInfo.status === "loading"){
          if(tab.url === "chrome://downloads/"){
            chrome.tabs.update(tab.id, {url: "REPLACEMENT.html"});
          } 
        }
      });
      

      基本上它的作用是 - 一旦页面 chrome://downloads 开始加载(使用 tabs.onUpdated API),页面就会重定向到 REPLACEMENT.html(使用 tabs.update API)... 没有明显的延迟标签更新 因为此脚本在chrome://downloads 页面开始加载之前运行...您可以通过在下载页面上按 CTRL + U 在文件中使用类似的代码来查看和复制其源代码

      【讨论】:

      • 新页面上会提供正确的变量吗?也许他们来自chrome.*,它总是可用的......我要试试!谢谢回复。我会让你知道 =)
      • 这不起作用 =( 用新页面替换有效。但是有一个可见的延迟。(当onUpdated 事件触发时,该页面已经呈现。)但这不是问题。新页面与原页面没有相同的权限:函数chrome.send不存在,这意味着无法检索(和显示)下载。这完全是关于权限=(也许如果我给我的扩展更多permissions? 现在他们是['tabs', 'http://*/*']
      猜你喜欢
      • 2023-02-02
      • 1970-01-01
      • 2016-04-10
      • 1970-01-01
      • 2011-03-03
      • 2014-10-19
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多