Javascript chrome存储onChanged侦听器未启动

Javascript chrome存储onChanged侦听器未启动,javascript,jquery,google-chrome-extension,Javascript,Jquery,Google Chrome Extension,我正在制作一个Chrome扩展,它从搜索结果中获取描述文本,并将其存储在Chrome存储器中。我使用chrome.storage.local.set在background js中更改chrome存储中的值。然后,我在content.js中访问它。当我删除onChanged.addListener()时,我的扩展正在工作,但我希望它只在chrome存储中的值发生更改时启动 content.js chrome.runtime.onMessage.addListener(function(reques

我正在制作一个Chrome扩展,它从搜索结果中获取描述文本,并将其存储在Chrome存储器中。我使用
chrome.storage.local.set
background js
中更改chrome存储中的值。然后,我在
content.js
中访问它。当我删除
onChanged.addListener()
时,我的扩展正在工作,但我希望它只在chrome存储中的值发生更改时启动

content.js

chrome.runtime.onMessage.addListener(function(request,sender,sendResponse){
    if (request.message=="browserAction"){
        var link = $('h3.r')
        link.click(function(){
            var d = this.nextSibling
            var description = $(d).find('span.st').text()
            var index = description.lastIndexOf("-")
            if (index>=0){
                var description = description.slice(index+2,description.length-1)
            }
            alert(description)
            chrome.runtime.sendMessage({"message":"linkClicked","description":description})
        })      
    }
})
chrome.storage.onChanged.addListener(function(changes,areaName){
chrome.storage.local.get("keyName",function(items) {//initialize the application
            console.log(items.keyName)
            var p = document.getElementsByTagName('p')
            for (n=0;n<p.length;n++){
                console.log(p[n].textContent)
                if (p[n].textContent.includes(items.keyName)){
                    console.log('found a match at paragraph' + p[n])
                    var newStr = p[n].textContent.replace(items.keyName,"<span style='background-color:yellow'>" + items.keyName + "</span>")
                    p[n].innerHTML=newStr
                    $('html, body').animate({
                    scrollTop: $('p:eq('+n+')').offset().top + 'px'
                    }, 'fast')          
                    return
                }
                else{console.log('no match found')}
            }

})  
})
manifest.json

{
    "manifest_version":2,
    "name":"extension",
    "version":"0.1",
    "content_scripts":[
        {
            "matches": ["<all_urls>"],
            "js":["content.js","jquery-3.1.1.min.js"]
        }],
    "browser_action":{
                "default_icon":"icon.png"
            }
        ,
    "background":{
        "scripts":["background.js"]
    },
    "permissions":[
        "storage",
        "tabs"
    ]

}
{
“清单版本”:2,
“名称”:“扩展名”,
“版本”:“0.1”,
“内容脚本”:[
{
“匹配项”:[“”],
“js”:[“content.js”,“jquery-3.1.1.min.js”]
}],
“浏览器操作”:{
“默认图标”:“icon.png”
}
,
“背景”:{
“脚本”:[“background.js”]
},
“权限”:[
“存储”,
“选项卡”
]
}

发现onChanged侦听器正在启动。新页面打开得太快,我无法在控制台中看到带有链接的页面中的消息。为了使content.js代码在新打开的选项卡上运行,我使用了
setTimeout
,直到加载新页面

background.js

chrome.browserAction.onClicked.addListener(function(tab){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var activeTab = tabs[0];
        chrome.tabs.sendMessage(activeTab.id,{"message":"browserAction"})
      });
})
chrome.runtime.onMessage.addListener(function(request,sender,sendResponse){
    if (request.message=="linkClicked"){
        var d = request.description
        console.log(d)
        if (d.indexOf('.')>=0){ //this will always evaluate to true and execute, leaving empty string ||||
            var d = d.slice(0,d.indexOf('.')) //get a snippet of text
        }
    }
    setTimeout(function(){chrome.storage.local.set({"keyName": d});},2000)//Delay
})

可能值与存储的值相同?我不这么认为,因为每个描述文本都不同,但我如何检查?您已经将其打印到后台控制台,请查看。阿尔索
chrome.browserAction.onClicked.addListener(function(tab){
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
        var activeTab = tabs[0];
        chrome.tabs.sendMessage(activeTab.id,{"message":"browserAction"})
      });
})
chrome.runtime.onMessage.addListener(function(request,sender,sendResponse){
    if (request.message=="linkClicked"){
        var d = request.description
        console.log(d)
        if (d.indexOf('.')>=0){ //this will always evaluate to true and execute, leaving empty string ||||
            var d = d.slice(0,d.indexOf('.')) //get a snippet of text
        }
    }
    setTimeout(function(){chrome.storage.local.set({"keyName": d});},2000)//Delay
})