让我们有一个虚构的扩展,它可以在' /'来自url,在内容脚本中完成。还会更新popup.html中的徽章和更改文本,这对于每个标签(不同的标签,差异。网址)都是不同的
contentscript.js:
var str = document.URL;
var n = str.lastIndexOf('/');
var result = str.substring(n + 1);
chrome.runtime.sendMessage({message: "result", url: result});
eventpage.js:
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.message == "result") {
chrome.browserAction.setBadgeText({tabId:sender.tab.id, "text" : "1"});
links = request.url;
}
popup.js:
$(function () {
var bg = chrome.extension.getBackgroundPage();
$('#total').text(bg.links);
});
popup.html
<!DOCTYPE html>
<html>
<head>
<title>Plugin</title>
<script type="text/javascript" src="jquery-1.11.3.js"></script>
<script type="text/javascript" src="popup.js"></script>
</head>
<body>
<div id='total'>Nothing</div>
</body>
</html>
这仅适用于新加载的标签,而不是我在它们之间点击时。例如,当我加载第一页&#34; webpage.com/first"我的弹出窗口是第一个&#39;。当我加载第二页(在不同的选项卡上)&#34; webpage.com/second"弹出窗口是第二个&#39;。之后我点击第一页(在第一个标签页上),我的弹出窗口是第二个&#39;我打算成为第一个&#39;。
//我的项目中的徽章是反击的,我在这里写的只是为了获得一个想法
答案 0 :(得分:1)
如果您只需要获取标签网址,只需在popup.js中使用chrome.tabs.query即可完成内容脚本:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
$('#total').text(tabs[0].url.replace(/^.+?\/([^\/]*)$/, '$1'));
});
否则在popup.js中使用chrome.tabs.executeScript:
chrome.tabs.executeScript({
code: "document.querySelector('p.something').textContent"
}, function(results) {
$('#something').text(results[0]);
});
这两种方法都需要manifest.json中的"activeTab"
permission。