2010-07-29 96 views
3

我正在製作Google Chrome擴展程序,並遇到問題。Chrome瀏覽器擴展程序:將當前標籤附加到彈出窗口然後瀏覽其中的DOM

我想通過popup.html中的DOM上傳和搜索。

這是我如何得到當前選項卡(我發現劇本的地方,信貸不屬於我):

chrome.windows.getCurrent(function(w) { 
     chrome.tabs.getSelected(w.id,function (response){ 
)}; 

我的問題是這樣的:我需要通過響應的DOM遍歷。當試圖手動這樣做時,我不能,因爲響應變量現在由於某種原因未定義,所以使用控制檯不是一個選項。 當試圖提醒HTML文件中的響應時,它以一個對象的形式出現。然後,我嘗試瀏覽響應,就好像它是'文檔'對象一樣,但沒有運氣。

任何幫助將不勝感激。

回答

2

我相信彈出窗口與後臺頁面一樣,因此您需要使用內容腳本來訪問頁面DOM。

您可以使用chrome.tabs.executeScript注入內容腳本,在內容腳本中處理您的DOM遍歷,然後使用消息傳遞API將內容腳本中需要的信息傳回給彈出窗口。

如果您提供有關您嘗試解決的問題的更多信息,則可以嘗試詳細說明此問題。

4

通過將null作爲窗口ID傳遞給getSelected,您可以獲得彈出窗口的選定選項卡。 ()在彈出式窗口,你可以聽延期事件和執行腳本的內容推送到彈出:

chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
     if (request.action == "content") 
     { 
      console.log('content is ' + request.content.length + ' bytes'); 
     } 
    }); 
chrome.tabs.getSelected(null, function(tab) { 
     chrome.tabs.executeScript(tab.id, { file: 'scripts/SendContent.js' }); 
    }); 

最後內容腳本...我有它作爲「腳本/ SendContent.js」我的擴展文件夾,但劇本是很簡單的,你可以通過將代碼中的代碼屬性而不是名稱的對象的文件屬性執行它傳遞給executeScript:

console.log('SendContent.js'); 
    chrome.extension.sendRequest({ 
      action: "content", 
      host: document.location.hostname, 
      content: document.body.innerHTML 
     }, function(response) { } 
    ); 

結果:

POPUP: content is 67533 bytes 

如果遇到問題,請使用console.log()並右鍵單擊您的頁面或瀏覽器操作來檢查它並在控制檯上閱讀您的消息(或從此處調試腳本)。

相關問題