从Chrome扩展程序获取当前页面的源HTML

我有一个Chrome扩展程序。我需要从当前页面的HTML源进行分析。我在这里找到了各种带有背景页面和内容脚本的解决方案,但没有一个对我有帮助。这是我到目前为止所拥有的:

manifest.json:

{

"name": "Extension",

"version": "1.0",

"description": "Extension",

"browser_action": {

"default_icon": "bmarkred.ico",

"popup": "Test.html"

},

"content_scripts": [

{

"matches": ["http://*/*"],

"js": ["content.js"]

}

],

"background": {

"page": "backgroundPage.html"

},

"permissions": [

"cookies",

"tabs",

"http://*/*",

"https://*/*"

]

}

background.html:

<html>

<head>

<script type="text/javascript">

try {

chrome.tabs.getSelected(null, function (tab) {

chrome.tabs.sendRequest(tab.id, {action: "getSource"}, function(source) {

alert(source);

});

});

}

catch (ex) {

alert(ex);

}

</script>

</head>

</html>

content.js:

chrome.extension.onRequest.addListener(function(request, sender, callback) {

if (request.action == "getSource") {

callback(document.getElementsByTagName('html')[0].innerHTML);

}

});

警报始终警报未定义。即使我在content.js文件中将回调函数更改为:

callback('hello');

结果还是一样。我究竟做错了什么?也许我走错路了。我真正需要的是这个。当用户打开扩展弹出窗口时(只有那时),我需要当前页面的HTML,以便可以对其进行分析。有什么建议么?

回答:

将脚本插入您要从中获取源代码的页面中,并将其发送回弹出窗口…。

{

"name": "Get pages source",

"version": "1.0",

"manifest_version": 2,

"description": "Get pages source from a popup",

"browser_action": {

"default_icon": "icon.png",

"default_popup": "popup.html"

},

"permissions": ["tabs", "<all_urls>"]

}

<!DOCTYPE html>

<html style=''>

<head>

<script src='popup.js'></script>

</head>

<body style="width:400px;">

<div id='message'>Injecting Script....</div>

</body>

</html>

chrome.runtime.onMessage.addListener(function(request, sender) {

if (request.action == "getSource") {

message.innerText = request.source;

}

});

function onWindowLoad() {

var message = document.querySelector('#message');

chrome.tabs.executeScript(null, {

file: "getPagesSource.js"

}, function() {

// If you try and inject into an extensions page or the webstore/NTP you'll get an error

if (chrome.runtime.lastError) {

message.innerText = 'There was an error injecting script : \n' + chrome.runtime.lastError.message;

}

});

}

window.onload = onWindowLoad;

// @author Rob W <http://stackoverflow.com/users/938089/rob-w>

// Demo: var serialized_html = DOMtoString(document);

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)

});

以上是 从Chrome扩展程序获取当前页面的源HTML 的全部内容, 来源链接: utcz.com/qa/432601.html

回到顶部