开发者

Could I make a Google Chrome extension for chrome pages (downloads, extensions etc)?

开发者 https://www.devze.com 2023-03-01 14:22 出处:网络
I\'d like to make a very simple extensions that slightly alters how the Downloads page looks. Changing the History page might be interesting too, but that\'s for later.

I'd like to make a very simple extensions that slightly alters how the Downloads page looks. Changing the History page might be interesting too, but that's for later.

Is there a way to do that?

I tried making a Content Script extension, with "chrome://downloads" as match in manifest.json. Chrome won't allow that and responds with an error when packaging the extension.

Is there another simple way? It has to be simple, because changes would be simple, because all chrome:// pages are built with HTML, JS and CSS.

edit

After trying with background scripts a little...

I can't get chrome.tabs.executeScript to work! I added in background.html:

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

And I added this in manifest.json to add a (invisible) 'browser action button':

    ,"browser_action": {
/*      "popup": "background.html",开发者_开发问答*/
        "name": "Alter page"
    }

The onClicked event fires both alerts (first is background.html's body, second is undefined). But the code (a string with document.body.style.backgroundColor = 'red';) doesn't execute! And ofcourse there's no debugging for extensions like this =)

Any tips anyone? I'm trying to get a hold of the tab's window.document (not background.html's window.document!). An injected script (that's what chrome.tabs.executeScript is supposed to do) should do that.

PS

I'm stealing from make_page_red/manifest and make_page_red/background.html

The 'extension' I have so far: http://hotblocks.nl/js/downloads.rar

EDIT

I found out what I want to achieve is possible with just CSS. I don't need to inject javascript. Does that make it easier? Does that make it possible? =)


According to this documentation, chrome:// URLs are an invalid scheme so they won't be matched:

A match pattern is essentially a URL that begins with a permitted scheme (http, https, file, or ftp), and that can contain '*' characters.

I would look into using override pages instead.


As requested, here's my extension that can at least load when chrome://downloads is loaded, although as I said, I don't think you can modify the page even if you know that's the page you're viewing.

manifest.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>


Update: Since Chrome 31 there is an API for extensions that allows access to Chrome's downloads: https://developer.chrome.com/extensions/downloads

There's also an API that allows access to list and manage other installed extensions: https://developer.chrome.com/extensions/management


(Previous Answer)

Unfortunately, there's not currently an API for Chrome extensions to access information about a user's downloads. It's a widely requested feature, though, and there's some discussion among Chrome developers here: http://code.google.com/p/chromium/issues/detail?id=12133

Star the issue if it's a feature that you'd like to see, and you'll receive email updates.


As this page shows, there is no API to override the downloads page... However, there is a way to make a file you have made replace the chrome://downloads/ page whenever it is loaded using javascript in your background page...

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"});
    } 
  }
});

Essentially what this does is - As soon as the page chrome://downloads begins loading (using the tabs.onUpdated API), the page is redirected to REPLACEMENT.html (Using tabs.update API)... There is no visible delay in the tab update as this script is run before the chrome://downloads page begins loading... You can use a similar code in your file by pressing CTRL + U on the downloads page to view and copy its source code

0

精彩评论

暂无评论...
验证码 换一张
取 消