2012-03-06 16 views
5

Próbuję odtworzyć sygnał powiadomienia (lub sygnał dźwiękowy) na czacie SO z użyciem rozszerzenia do Chrome, ale nie mogę go naprawić (jeśli jest to możliwe). Próbowałem następujący kod:Odtwarzanie sygnału dźwiękowego na czacie SO

this.notify = function() { 
    $("#jplayer").jPlayer('play', 0); 
} 

Ale pojawia się następujący błąd:

Uncaught TypeError: Object [object Object] has no method 'jPlayer'

Czy istnieje sposób na wykorzystanie SO czat dźwięku „moduł”/odtwarzacz do odtwarzania sygnału dźwiękowego @mention?

UPDATE

wiem, że można ustawić własne „odtwarzacz audio”, ale chcę korzystać z odtwarzacza audio, który jest używany w czacie tutaj na SO i chcę użyć sygnału dźwiękowego powiadamiania.

Załadowałem mój pełny kod w GitHub gist, który jest częścią this project. Linia, do której próbuję wywołać odtwarzacz audio, to 224.

+0

W jakim pliku umieściłeś ten kod? Zgaduję, że kod nie jest uruchamiany na stronie, ale raczej strona w tle dla rozszerzenia. – mowwwalker

+0

@Walkerneo Używam tego w jednym z plików JS "content_scripts". – PeeHaa

+0

@Walkerneo Dodałem link do projektu, abyś mógł zweryfikować. – PeeHaa

Odpowiedz

3

To jest coś w stylu piaskownicy, nie wolno ci wykonywać skryptów ze strony, więc myślę, że liczba wtyczek się liczy.
To znany tylko kwestia grania poza piaskownicą ....

script.js

var customEvent = document.createEvent('Event'); 
customEvent.initEvent('JPlayerNotify', true, true); 

function notify() { 
    document.getElementById('communicationDIV').innerText='notify'; 
    document.getElementById('communicationDIV').dispatchEvent(customEvent); 
} 

// Utitlity function to append some js into the page, so it runs in the context of the page 
function appendScript(file) { 
    var script = document.createElement('script'); 
    script.setAttribute("type", "application/javascript"); 
    script.setAttribute("src", chrome.extension.getURL(file)); 
    document.head.appendChild(script); 
} 

appendScript("JPlayer.js"); 

// had to wait for a bit for the page to be ready (dialup and all), you wont need to do the setTimeout 
setTimeout("notify()",3500); 

JPlayer.js

var notify_node = document.createElement('div'); 
notify_node.id = 'communicationDIV'; 
document.documentElement.appendChild(notify_node); 

notify_node.addEventListener('JPlayerNotify', function() { 
    var eventData = notify_node.innerText; 
    if (eventData=='notify'){ 
    $("#jplayer").jPlayer('play', 0); 
    } 
}); 

manifest.json

{ 
    "name": "JPlayerNotify", 
    "version": "0.5.0", 
    "description": "JPlayerNotify", 
    "content_scripts" : [ 
    { 
     "matches": ["http://chat.stackoverflow.com/rooms/*"], 
     "js" : ["script.js"], 
     "run_at" : "document_idle", 
     "all_frames" : false 
    } 
    ], 
    "permissions": [ 
    "http://stackoverflow.com/*", 
    "https://stackoverflow.com/*", 
    "http://*.stackoverflow.com/*", 
    "https://*.stackoverflow.com/*" 
    ] 
} 

Możesz zobaczyć pewne rzeczy na temat komunikacji ze stroną tutaj ... http://code.google.com/chrome/extensions/content_scripts.html

3

Dlaczego nie po prostu:

new Audio('beep.wav').play(); 

Chrome obsługuje Audio (ostatnie wersje tak), więc powinno być dobrze. Właśnie tego używam w moim rozszerzeniu.

+0

Dość uczciwi, to twoja prerogatywa. Ale ta metoda działa i jest prosta. Czy masz link do dowolnej dokumentacji dla tego modułu czatu SO, więc mogę spróbować pomóc ci odpowiedzieć na twoje pytanie? –

+0

Zaktualizowałem link w moim pytaniu do pełnego kodu. Nie ma dokumentów dotyczących tej funkcji, ponieważ jest to wewnętrzny czat SO. – PeeHaa

+2

Aby rozszerzyć na to ... co powiesz na ... 'nowe Audio (chrome.extension.getURL (" so.mp3 ")). Play();' i so.mp3 pochodzi z http: //or.cdn. sstatic.net/chat/so.mp3 – PAEz

Powiązane problemy