2012-11-13 85 views
23

我正在編寫Chrome擴展程序,並且在其中的一部分中,當點擊彈出頁面上的按鈕時,我需要獲取當前選項卡的標題和URL。Chrome擴展程序:從彈出窗口獲取當前選項卡

我曾經在Chrome的消息傳遞系統上工作過,經過很多努力,在很多場合下都設法使它工作。但是,我從來沒有必須使用彈出頁面,而且從我讀過的內容來看,這樣做要困難得多。

我已經設法找出迄今時間表是這樣的:

  1. popup.html/popup.js:   按鈕被點擊
  2. popup.html/popup.js:   請求/消息被髮送到內容腳本
  3. contentScript.js:                         標題和在當前標籤的URL被存儲在可變
  4. contentScript.js:         從彈出頁
  5. contentScript.js接收     請求/消息        2個變量作爲字符串化的響應發送
  6. popup.html/popup.js:   的2個變量是從響應

平常我能想出解決辦法,但分析時,我讀過那些在作品中拋出一個扳手的幾件事情,例如:

  • chrome.tabs.getSelected只能在後臺頁面/腳本中使用。這是否意味着內容腳本根本不需要使用?
  • 消息無法從內容腳本到彈出頁面直接發送,它們必須通過後臺頁面
  • 一個彈出式窗口已經被確認爲存在之前的消息可以傳遞給它(雖然,我認爲去我知道如何做到這一點)

我已經發現Chrome的消息傳遞系統足夠困難,但是,這完全混淆了我。因此,這篇文章。

回答

-4

沒關係。

原來,你可以直接從彈出窗口中使用chrome.tabs.getSelected。有人撒謊。 ¬¬

+1

'鉻。 tabs.getSelected'被棄用(甚至沒有在文檔中列出)轉而支持'chrome.tabs.query'。我不確定'chrome.tabs.query'是否在彈出頁面中工作。 – Stan

+0

你有什麼使用建議嗎? – mythofechelon

+1

直到它的支持,您可以繼續使用'getSelected',或測試,如果'query'工作,特別是與清單第2版(第1版明年將停產)。作爲最後的手段,你可以在一個變量聽Chrome標籤'onCreated','onActivated'在你的背景頁,店面活動標籤的回報,比方說,在一個叫做'getCurrentTab'方法,然後從彈出就像調用它那:'chrome.extension.getBackgroundPage()。getCurrentTab()'。 – Stan

50

chrome.tabs.getSelected已棄用。您應該改用chrome.tabs.query

chrome.tabs.query需要兩個參數:查詢對象和一個回調函數,它產生的突出部作爲一個參數的陣列。

您可以通過查詢這是目前活躍,在當前窗口中的所有選項卡獲得「當前標籤」。

var query = { active: true, currentWindow: true }; 

由於查詢將返回單獨包含當前標籤中標籤陣列,一定要採取的第一個元素在回調

function callback(tabs) { 
    var currentTab = tabs[0]; // there will be only one in this array 
    console.log(currentTab); // also has properties like currentTab.id 
} 

的Et瞧:

chrome.tabs.query(query, callback); 
+0

這應該是被接受的答案 – andrhamm

+0

感謝您的這個提示......我一直在努力獲得彈出窗口的URL。必須設置一個timeOut ...我發現當頁面加載時我使用了很多timeOut,並且我正在尋找頁面信息。 – denikov

+0

如果你想使用currentTab.url屬性則必須包含的manifest.json即'「權限」鏈接的權限:「標籤」,...]' –

相關問題