2010-07-29 80 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()并右键单击您的页面或浏览器操作来检查它并在控制台上阅读您的消息(或从此处调试脚本)。

相关问题