Chrome扩展程序 - 完全加载时获取页面源(客户端内容也是如此)

时间:2018-03-14 14:23:19

标签: google-chrome-extension

我正在开发Chrome扩展程序,我需要检索新创建标签的源代码。

检索源代码本身并不是问题,我的脚本完美地完成了这一点,但我正在寻找的是在页面完全加载后获取源代码包括页面加载后插入的动态内容(例如与Ajax一样)。

要获取源代码,我正在使用

chrome.tabs.executeScript(tabId, 
    {
        file: 'test.js',
    }, function(results) 
    {
        // DO SOMETHING HERE

    }

test.js包含以下内容:

function DOMtoString(document_root) {
var html = '',
    node = document_root.firstChild;
while (node) {
    switch (node.nodeType) {
    case Node.ELEMENT_NODE:
        html += node.outerHTML;
        break;
    case Node.TEXT_NODE:
        html += node.nodeValue;
        break;
    case Node.CDATA_SECTION_NODE:
        html += '<![CDATA[' + node.nodeValue + ']]>';
        break;
    case Node.COMMENT_NODE:
        html += '<!--' + node.nodeValue + '-->';
        break;
    case Node.DOCUMENT_TYPE_NODE:
        // (X)HTML documents are identified by public identifiers
        html += "<!DOCTYPE " + node.name + (node.publicId ? ' PUBLIC "' + node.publicId + '"' : '') + (!node.publicId && node.systemId ? ' SYSTEM' : '') + (node.systemId ? ' "' + node.systemId + '"' : '') + '>\n';
        break;
    }
    node = node.nextSibling;
}
return html;
}

chrome.runtime.sendMessage({
action: "getSource",
source: DOMtoString(document),
metadata: shop_metadata
});

我想要做的是仅在检测到类时检索源代码,如果在几秒钟后失败,脚本应该跳过该过程。我正在寻找的课程可在“shop_metadata”变量中找到。

有没有办法像我的脚本一样使用SendMessage实现这一点?

我试过这样做:

function test (document)
{

    var checkExist = setInterval(function() 
        {
            if ($('.product-title').length) 
                {
                    console.log("Exists!");
                    source = DOMtoString(document);
                    console.log(source);
                    return source;
                    clearInterval(checkExist);

                }
        }, 5000);

}

然后修改我的消息:

chrome.runtime.sendMessage({
action: "getSource",
source:test(document),
metadata: shop_metadata
});

如果我在控制台中执行此操作,我会获得包含动态内容的源代码,但是当我在扩展中检查“source”的内容时,它会返回“undefined”

由于

劳伦

0 个答案:

没有答案