1

Chrome 확장 프로그램에서 브라우저 액션 아이콘을 "red.png"또는 "green.png"(둘 다 동일한 디렉토리에 저장 됨)로 변경하고 있습니다. 다른 모든 파일과 마찬가지로) 브라우저 앱이 html5 태그에서 소리가 감지되면.Chrome 확장 프로그램 : 확장 기능이 작동하지 않음 - 백그라운드 스크립트와의 콘텐츠 스크립트 교환

내 논리적 사고 프로세스는 다음과 같습니다. 사용자가 페이지를 열면 스크립트는 지속적으로 (아마도 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 확장 프로그램 개발뿐만 아니라 자바 스크립트에도 매우 새로운 기능입니다 (프로그래밍에는 새로운 것은 아니지만).

다른 작업 (더 나은)을 수행하여 같은 작업을 수행 할 수 있다고 생각되면 알려 주시기 바랍니다.

모든 입력 사항을 매우 높이 평가할 것입니다. 고맙습니다!

답변

1

UPDATE : playing 문자열이기 때문에

또한, 표현 playing == true 항상 false로 평가됩니다. 그래서 :

// 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를라는 기능을 실행"

chagne 위와 : BTW
setInterval(sendInfo, 500);


, chrome.extension.sendRequest/onRequest가 폐기 대신 chrome.runtime.sendMessage/onMessage로 대체되어야한다.
메시지를 보내기 전에 전자는 이벤트 페이지 (즉, 비 지속성 배경 페이지)를 제대로로드하지 않으므로 문제의 원인 일 수 있습니다.

+0

이 부분을 수정 해 드리겠습니다. 그래도 작동하지 않지만 오류를 어디서부터 시작해야할지 모르겠습니다. – AndrewB

+1

@AndrewB : 오류의 가능한 원인 하나에 대한 업데이트 된 답변을 참조하십시오 (문제가 해결 된 경우 알려주십시오). 문제가 지속되면 배경 페이지의 콘솔 로그 및 콘텐츠 스크립트가 삽입되는 웹 페이지의 오류를 찾으십시오. – gkalpak

+0

안녕하세요, 원래 게시글에서 사용중인 코드를 업데이트했습니다. 여전히 작동하지 않습니다 (작동 중이면 이미지가 빨간색에서 녹색으로 바뀌므로 발생하지 않음). 테스트 대상 페이지는 최소한 두 페이지이고 두 개의 오디오 태그와 h1 태그가 있으며 오디오 태그 중 하나는 ID가 "myAudio"입니다. 양해 해 주셔서 감사 드리며 시간이 오래 걸립니다. – AndrewB

관련 문제