Google chrome Chrome扩展:扩展不工作-内容脚本与后台脚本通信

Google chrome Chrome扩展:扩展不工作-内容脚本与后台脚本通信,google-chrome,javascript-events,google-chrome-extension,background,content-script,Google Chrome,Javascript Events,Google Chrome Extension,Background,Content Script,我正在开发一个Chrome扩展,当浏览器应用程序检测到html5标签播放声音时,它会将浏览器操作图标更改为“red.png”或“green.png”(这两个图标都保存在与所有其他文件相同的目录中) 我的逻辑思维过程是:用户打开页面,脚本开始在页面上运行,该页面不断(可能是setInterval())检查声音是否在运行。如果声音正在运行,将图标更改为“green.png”,否则,将其设置为“red.png” 我检查是否播放声音的方式如下: if (audio.duration > 0 &a

我正在开发一个Chrome扩展,当浏览器应用程序检测到html5标签播放声音时,它会将浏览器操作图标更改为“red.png”或“green.png”(这两个图标都保存在与所有其他文件相同的目录中)

我的逻辑思维过程是:用户打开页面,脚本开始在页面上运行,该页面不断(可能是setInterval())检查声音是否在运行。如果声音正在运行,将图标更改为“green.png”,否则,将其设置为“red.png”

我检查是否播放声音的方式如下:

 if (audio.duration > 0 && !audio.paused)
其中audio是保存元素的变量

这是我的密码:

    manifest.json file:

{
    "name": "Creative Sound Dedection",
    "description": "Creatively detects sound.",
    "version": "1.0",

    "permissions": [
        "activeTab"
    ],

    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },

    "browser_action": {
        "default_icon": "red.png"
    },

    "content_scripts" : [
        {
            "matches" : [ "<all_urls>" ],
            "js" : [ "myscript.js" ]
        }
    ],

    "manifest_version": 2
}

我正在寻找关于为什么这不起作用以及如何纠正它的帮助,我对Chrome扩展开发以及javascript(虽然不一定是编程新手)都很陌生

如果你能想出其他更好的方法来完成同样的任务,请告诉我


任何意见都将不胜感激!谢谢大家!

更新:

此外,表达式
playing==true
将始终计算为
false
,因为
playing
是一个字符串。因此:

// Change that:
var playing = request.playing;
if (playing == true) {...

// To this:
var playing = request.playing;
if (playing == "true") {...

setInterval(sendInfo(),500)表示:
每隔500毫秒,执行由
sendInfo()
返回的

既然你想说:
每隔500毫秒,执行名为
sendInfo
的函数

将上述内容更改为:
setInterval(sendInfo,500)


顺便说一句,
chrome.extension.sendRequest/onRequest
已过时,应替换为/

除已过时外,前者在发送消息之前没有正确加载事件页面(也称为非持久性后台页面),因此这可能是问题的原因。

更新:

此外,表达式
playing==true
将始终计算为
false
,因为
playing
是一个字符串。因此:

// Change that:
var playing = request.playing;
if (playing == true) {...

// To this:
var playing = request.playing;
if (playing == "true") {...

setInterval(sendInfo(),500)表示:
每隔500毫秒,执行由
sendInfo()
返回的

既然你想说:
每隔500毫秒,执行名为
sendInfo
的函数

将上述内容更改为:
setInterval(sendInfo,500)


顺便说一句,
chrome.extension.sendRequest/onRequest
已过时,应替换为/

除已过时外,前者在发送邮件之前没有正确加载事件页(也称为非持久性背景页),因此这可能是您出现问题的原因。

将编辑此部分,谢谢,但仍然不起作用,我不知道从何处开始查找错误。@AndrewB:请,请参阅我的更新答案,了解另一个可能的错误原因(如果它解决了问题,请告诉我)。如果问题仍然存在,请尝试在后台页面和注入内容脚本的网页的控制台日志中查找任何错误。您好,刚刚更新了我在原始帖子中使用的代码。它仍然不工作(如果它工作,图像将从红色变为绿色,这不会发生)。它测试的页面是我自己制作的最小页面,有两个音频标签和一个h1标签,其中一个音频标签的id是“myAudio”。谢谢你的耐心,我很忙,所以回复你并测试它有时需要时间@AndrewB:我更新了我的答案,补充了一个错误原因:)你报告的内容脚本很奇怪。重新加载扩展后是否刷新了页面?您是否在网页的console.log或后台页面的console日志中发现任何错误?@AndrewB:关于使用
==
进行比较,ECMAScript 5.1定义了。简而言之,
“true”==true
归结为
NaN==1
,其计算结果为
false
。将编辑此部分,谢谢,尽管仍然不起作用,而且我不知道从何处开始查找错误。@AndrewB:请查看我的更新答案,以了解更多可能的错误原因(并让我知道它是否解决了问题)。如果问题仍然存在,请尝试在后台页面和注入内容脚本的网页的控制台日志中查找任何错误。您好,刚刚更新了我在原始帖子中使用的代码。它仍然不工作(如果它工作,图像将从红色变为绿色,这不会发生)。它测试的页面是我自己制作的最小页面,有两个音频标签和一个h1标签,其中一个音频标签的id是“myAudio”。谢谢你的耐心,我很忙,所以回复你并测试它有时需要时间@AndrewB:我更新了我的答案,补充了一个错误原因:)你报告的内容脚本很奇怪。重新加载扩展后是否刷新了页面?您是否在网页的console.log或后台页面的console日志中发现任何错误?@AndrewB:关于使用
==
进行比较,ECMAScript 5.1定义了。简而言之,
“true”==true
归结为
NaN==1
,其计算结果为
false
// Change that:
var playing = request.playing;
if (playing == true) {...

// To this:
var playing = request.playing;
if (playing == "true") {...