2014-05-14 36 views
0

我想在Chrome擴展上點擊一下即可打開網頁上的所有鏈接。我爲此嘗試,但我沒有得到任何結果。請幫我...只需點擊一下Chrome擴展程序,即可打開網頁上的所有鏈接。

我manifist.json文件:

{ 
    "name": "Open Links in New Tabs", 
    "version": "1.0", 
    "description": "open all link in page on new tabs with one click", 
    "background_page" : "background.html", 
    "browser_action": { 
    "default_icon": "icon.png" 
    }, 

    "permissions": 
    ["tabs"], 
    "manifest_version": 2 
} 

background.html文件:

<!doctype html> 
<html> 
    <head> 
    <script src="background.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

background.js文件:

for(i = 0; i < document.links.length; i++) 
{ chrome.tabs.create({active: true, url: document.links[i].href});} 

請解釋任何問題。謝謝

+0

可能重複[chrome擴展 - 打開頁面上的所有鏈接在新標籤上點擊一下](http://stackoverflow.com/questions/23534169/chrome-extensions-open - 全鏈接在頁面上,新的選項卡,與一點擊) – Xan

回答

2

當您在background.js中訪問document對象時,您正在查看後臺頁面,而不是當前活動的選項卡。

要訪問打開頁面的DOM內容,您需要一個內容腳本。然後它可以向後臺腳本發送一條消息(可以訪問chrome.tabs)並打開鏈接列表。

請花點時間閱讀這本優秀的overview of extension architecture。此外,請閱讀messaging以通過列表。

實際上,如果您打算通過chrome.tabs.executeScript以編程方式注入腳本,那麼可以關閉消息傳遞功能,並使用callback of executeScript


作爲一個側面說明,因爲你沒有在後臺頁面的任何HTML,你也可以通過自動生成的腳本頁面這樣的替換:

的manifest.json

"background": { 
    scripts": ["background.js"] 
}, 

到位"background_page"


最後,考慮最低權限喲你需要。

如果您的擴展應該在點擊擴展按鈕時觸發(包裝在chrome.browserAction.onClicked監聽器中),您可以使用activeTab permission「免費」注入腳本,無需標籤/主機權限。

同樣爲chrome.tabs.create,你不需要強大和可怕的「標籤」權限。

1

有不少。

  1. 後臺腳本無權訪問選項卡的頁面DOM。它可以直接訪問的唯一DOM是background.html的DOM。您應該使用內容腳本和消息傳遞。
  2. background_page是Manifest版本1的一個選項,您使用的是Manifest版本2,其選項名爲background。通常您直接提供background.js作爲腳本(請參閱https://developer.chrome.com/extensions/background_pages)。你應該實施這些建議後返回
相關問題