Google chrome extension Chrome扩展:将当前选项卡附加到弹出窗口,然后遍历其DOM

Google chrome extension Chrome扩展:将当前选项卡附加到弹出窗口,然后遍历其DOM,google-chrome-extension,Google Chrome Extension,我正在制作谷歌浏览器的扩展,遇到了一个问题 我正试图上传和搜索popup.html中的DOM 下面是我如何获得当前选项卡(我在某处找到了脚本,信用不属于我): 我的问题是:我需要遍历响应的DOM。当尝试手动执行此操作时,我无法执行,因为由于某些原因,响应变量现在未定义,因此使用控制台不是一个选项。 当试图提醒html文件中的响应时,它作为一个对象出现。然后,我试图在响应中导航,就像它是“document”对象一样,但也没有运气 任何帮助都将不胜感激。我相信弹出窗口的沙盒方式与背景页面相同,因此您

我正在制作谷歌浏览器的扩展,遇到了一个问题

我正试图上传和搜索popup.html中的DOM

下面是我如何获得当前选项卡(我在某处找到了脚本,信用不属于我):

我的问题是:我需要遍历响应的DOM。当尝试手动执行此操作时,我无法执行,因为由于某些原因,响应变量现在未定义,因此使用控制台不是一个选项。 当试图提醒html文件中的响应时,它作为一个对象出现。然后,我试图在响应中导航,就像它是“document”对象一样,但也没有运气


任何帮助都将不胜感激。

我相信弹出窗口的沙盒方式与背景页面相同,因此您需要使用内容脚本来访问页面DOM

您可以使用
chrome.tabs.executeScript
插入内容脚本,在内容脚本中处理DOM遍历,然后使用消息传递API将所需信息从内容脚本传递回弹出窗口


如果您提供有关您试图解决的问题的更多信息,我可以尝试对此进行详细说明。

您可以通过将null作为窗口id传递给getSelected来获取弹出窗口的selected选项卡。()在弹出窗口中,您可以侦听扩展事件并执行脚本将内容推送到弹出窗口:

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' } );
    });
最后是内容脚本。。。我的扩展文件夹中有一个名为“scripts/SendContent.js”的脚本,但该脚本非常简单,您可以将代码放在code属性中,而不是将名称放在传递给executeScript的对象的file属性中来执行它:

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

POPUP: content is 67533 bytes