用于更新特定选项卡弹出框的内容脚本
问题描述:
让我们有一个虚构的扩展,它将url中的'/'之后的所有内容都放在内容脚本中完成。还更新标志,并更改popup.html文本,这对于每一个标签不同(不同的标签,DIFF网址。)用于更新特定选项卡弹出框的内容脚本
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>
这仅适用于新装入的标签,而不是当我把它们之间的点击。例如,当我加载第一页“webpage.com/first”时,我的弹出窗口变得'第一'。当我加载第二页(在不同的选项卡上)“webpage.com/second”弹出窗口是“第二”。之后,我点击第一页(第一个标签),我的弹出窗口是'第二',我的意思是'第一'。
在我的项目//徽章柜台,我在这里写的只为获得一个想法
答
如果你仅仅只需要在使用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。
1.'{message:“结果”}'应该是'{message:“result”,url:result}'2.您在背景页面中只有一个全局'links'变量,所以当然它只存储最后的设定值。 3.内容脚本只在加载标签时执行一次,而不是在每个标签页开关 – wOxxOm
至3之间执行。我知道它只执行一次,但我找到了如何让popup.html在每个标签上变得不同的方法 –