2011-04-27 99 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

星,如果它是你想看到一個功能的問題,您會收到電子郵件更新。