Chrome扩展:如何获取最后打开标签页的页面内容
解决Chrome扩展新标签页内容获取问题
方法一:通过标签页创建回调+主动注入脚本获取内容
在background.js里,创建新标签页后利用回调拿到标签页ID,等页面加载完成后主动注入脚本提取内容:
// background.js var newUrl = "https://www.qwer.com"; // 务必添加完整协议头 chrome.tabs.create({url: newUrl}, function(newTab) { // 监听标签页加载状态,确保内容已渲染完成 chrome.tabs.onUpdated.addListener(function listener(tabId, info) { if (tabId === newTab.id && info.status === 'complete') { chrome.tabs.onUpdated.removeListener(listener); // 移除监听避免重复触发 // 注入脚本获取页面文本 chrome.scripting.executeScript({ target: {tabId: newTab.id}, func: function() { return document.body.innerText; } }, function(results) { var pageText = results[0].result; console.log("新标签页文本内容:", pageText); // 此处可对获取到的文本做后续处理 }); } }); });
需要在manifest.json中声明对应权限:
{ "permissions": ["scripting", "tabs"], "host_permissions": ["https://www.qwer.com/*"] }
方法二:配置content_script自动注入目标页面
修改manifest.json的content_scripts配置,让脚本自动注入到目标域名的页面:
{ "content_scripts": [ { "matches": ["https://www.qwer.com/*"], "js": ["content.js"] } ] }
在content.js中,页面加载完成后把内容发送给background:
// content.js window.addEventListener('load', function() { var pageText = document.body.innerText; chrome.runtime.sendMessage({type: "PAGE_TEXT", text: pageText}); });
最后在background.js里监听消息接收内容:
// background.js chrome.runtime.onMessage.addListener(function(message, sender) { if (message.type === "PAGE_TEXT") { console.log("收到新标签页文本:", message.text); // 处理文本内容 } });
注意事项
- 必须使用完整URL(带
http://或https://),否则标签页创建和权限匹配会出问题。 - 如果目标页面是动态渲染的SPA,
load事件可能无法捕获全部内容,可改用DOMContentLoaded或监听元素变化来确保内容加载完成。
内容的提问来源于stack exchange,提问作者angrycreon
相关产品推荐
相关产品推荐

