我正在使用Chrome扩展程序,当浏览器应用程序检测到声音时,它会将浏览器操作图标更改为“red.png”或“green.png”(它们都保存在与所有其他文件相同的目录中)从html5标签播放。
我的逻辑思维过程是:用户打开页面,脚本开始在页面上运行,不断(可能是setInterval())检查声音是否正在运行。如果声音正在运行,请将图标更改为“green.png”,否则将其设置为“red.png”。
我正在检查声音是否正在播放的方式是:
if (audio.duration > 0 && !audio.paused)
音频是包含元素的变量。
这是我的代码:
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
}
background.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
var playing = request.playing;
if(playing == true)
{
chrome.browserAction.setIcon({path:"green.png"});
}else{
chrome.browserAction.setIcon({path:"red.png"});
}
});
myscript.js
function isAudioPlaying(var audio)
{
if (audio !== false && audio.duration > 0 && !audio.paused)
{
return true;
}
return false;
}
function getAudio()
{
if(document.getElementById("myAudio")) return document.getElementById("myAudio");
return false;
}
//if audio is playing: tell background that audio is playing, otherwise, tell it audio is not playing
function sendInfo()
{
chrome.runtime.sendMessage({
"playing": true
});
}
document.addEventListener('DOMContentLoaded', function () {
setInterval(sendInfo, 500);
});
我正在寻找帮助,说明为什么这不起作用以及如何纠正它,我对Chrome Extensions开发以及javascript(虽然不一定是编程新手)都很陌生。
另外,如果你能想到其他方法(更好)来完成同样的任务,请告诉我。
任何输入都将非常感谢!谢谢!
答案 0 :(得分:1)
<强>更新强>
此外,表达式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);
BTW, chrome.extension.sendRequest/onRequest
已过时,应替换为 chrome.runtime.sendMessage
/ onMessage
。
除了过时之外,前者在发送消息之前没有正确加载事件页面(例如非持久性后台页面),因此这可能是导致问题的原因。