2011-04-27 100 views
3

我想做一个非常简单的扩展,稍微改变下载页面的外观。更改历史记录页面可能也很有趣,但那是以后的事情。我可以为chrome页面(下载,扩展等)制作Google Chrome扩展程序吗?

有没有办法做到这一点?

我试过做Content Script延期,"chrome://downloads"matchmanifest.json。 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。这是否使它更容易?这是否有可能? =)

回答

4

根据this documentationchrome:// URL是一个无效的方案,从而它们将不匹配:

A匹配图案本质上是与允许的方案(httphttpsfile开头的URL,或ftp),并且可以包含'*'字符。

我会考虑用override pages来代替。


按照要求,这里是我的扩展,它至少可以负载时chrome://downloads被加载,虽然正如我所说,我不认为即使你知道这是你正在浏览的页面,您可以修改页面。

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> 
+0

似乎只有'书签,历史和newtab'是可以重写的...我特别寻找'downloads' =( – Rudie 2011-04-27 14:30:55

+0

看起来这不是一个选项,那么这并不奇怪:'' chrome:// downloads'是一个特殊的页面,可以访问用户的文件系统,所以它对打开自己有不同的含义,但是我对内容脚本所说的内容仍然是正确的:'chrome://'URL是一个无效的方案。我打算对另一种方法进行一点研究,继续。 – 2011-04-27 14:33:40

+0

当'chrome:// downloads'加载时,我能够制作一个后台脚本,但我猜我仍然会有如果我尝试修改该页面的内容,那么问题与以前相同,因为这将依赖于内容脚本。我很乐意证明错误,但现在,我要说它已被锁定。 – 2011-04-27 14:41:14

1

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查看并复制其源代码

+0

在新页面上可以使用正确的变量吗?也许他们来自'chrome。*',它总是可用的......我会试试!谢谢回复。我会让你知道=) – Rudie 2011-05-03 20:46:40

+0

这没有工作=(替换一个新的页面工作,但有一个可见的延迟(页面已经呈现,当onUpdated事件触发。)这并不是问题。新的页面没有与原始版本相同的权限:函数'chrome.send'不存在,这意味着下载无法被检索(并显示)。这完全是关于权利=(也许如果我给我的扩展更多'权限'?现在他们是'['tabs','http:// */*']' – Rudie 2011-05-03 20:57:57

3

更新:自Chrome 31以来,允许访问Chrome的下载内容的扩展程序:https://developer.chrome.com/extensions/downloads

There are als Ø一个API,允许访问列表和管理其他安装的扩展:https://developer.chrome.com/extensions/management


(前面的答案)

遗憾的是,目前不是一个API的Chrome扩展程序来访问有关用户的下载信息。这是一个普遍要求的功能,不过,有镀铬开发商这里中一些讨论:http://code.google.com/p/chromium/issues/detail?id=12133

星,如果它是你想看到一个功能的问题,您会收到电子邮件更新。