用于更新特定选项卡弹出框的内容脚本

用于更新特定选项卡弹出框的内容脚本

问题描述:

让我们有一个虚构的扩展,它将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”弹出窗口是“第二”。之后,我点击第一页(第一个标签),我的弹出窗口是'第二',我的意思是'第一'。

在我的项目

//徽章柜台,我在这里写的只为获得一个想法

+0

1.'{message:“结果”}'应该是'{message:“result”,url:result}'2.您在背景页面中只有一个全局'links'变量,所以当然它只存储最后的设定值。 3.内容脚本只在加载标签时执行一次,而不是在每个标签页开关 – wOxxOm

+0

至3之间执行。我知道它只执行一次,但我找到了如何让popup.html在每个标签上变得不同的方法 –

如果你仅仅只需要在使用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