2017-01-11 66 views
0

我正在開發簡單的Chrome擴展程序,目的是打開entry類的網頁上的每個鏈接。目前,我有這個....打開鏈接陣列

manifest.json的

{ 
    "manifest_version": 2, 

    "name": "Hello World", 
    "description": "A simple Chrome Extension", 
    "version": "1.0", 

    "background": { 
     "scripts": ["openlinks.js"], 
     "persistent": true 
    }, 

    "permissions": [ 
     "tabs", 
     "http://*/", 
     "https://*/" 
    ], 
    "browser_action": { 
     "default_icon": "logo.png" 
    } 
} 

openlinks.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    var linkArray = ['https://www.google.com', 'http://www.bbc.co.uk']; // your links 
    for (var i = 0; i < linkArray.length; i++) { 

    chrome.tabs.create({ 
     url: linkArray[i] 
    }); 
} 
}); 

現在我試圖取代樣品鏈接的數組與當前選項卡中的一組鏈接。它只是使用標準的JavaScript或jQuery來實現這個目標?

+0

實現,這將是相當複雜的一個堆棧溢出答案 - 注射一內容腳本,產生的鏈接陣列,消息的延長,以及響應於所述消息創建的選項卡。你能縮小你的問題嗎? –

+0

沒有意識到它會這麼介入!我是不是已經使用openlinks.js注入了內容腳本? – fightstarr20

回答

1

請看Chrome Extensions Overview # Architecture,因爲您需要事件頁面和內容腳本才能實現此目的。

這裏是我會怎麼去解決這個大綱:

  1. 清單結構(活動頁面+ activeTab權限)。

    "background": { "scripts": ["bg.js"], "persistent": false }, 
    "permissions": ["activeTab"], 
    "browser_action": {}, 
    
  2. 當點擊瀏覽器操作,瀏覽器授予權限訪問在當前選項卡,我們用它來注入腳本。見Content Scripts # Programmatic Injection

    // bg.js 
    chrome.browserAction.onClicked.addListener(tab => 
        chrome.tabs.executeScript({file: 'content.js'}); 
    }); 
    
  3. 內容腳本有權訪問DOM和使用message passing,但是從大多數擴展API的限制(特別是chrome.tabs)。

    // content.js 
    message = {} 
    message.links = [...document.querySelectorAll(
         'div.question-summary a.question-hyperlink')].map(e=>e.href); 
    chrome.runtime.sendMessage(message); 
    
  4. 背景頁面將偵聽消息。

    // bg.js 
    chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { 
        request.links.forEach(link => chrome.tabs.create({url: link}); 
    }); 
    
+0

鑑於內容腳本正在完成執行,將數據作爲內容腳本的結果返回並在'tabs.executeScript()'回調中接收它會更有效(因爲您應該有回調來處理錯誤條件(例如,用戶在不允許注入腳本的頁面上單擊瀏覽器操作按鈕))。如果這樣做,則不需要使用[Message Passing](https://developer.chrome.com/extensions/messaging)的額外複雜功能。 – Makyen

+0

謝謝喬希!現在通讀它 – fightstarr20

+1

說內容腳本「沒有其他擴展權限」是不準確的。雖然不需要列出可用的API,但下面的內容仍然很簡短,但更精確:「要獲得內容腳本允許的非常有限的'chrome。*'擴展API的完整列表,請參閱[內容腳本文檔](https://developer.chrome.com/extensions/content_scripts)「。 – Makyen