Could I make a Google Chrome extension for chrome pages (downloads, extensions etc)?
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.rarEDIT
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
, orftp
), 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
精彩评论