2012-03-06 21 views
5

Sto provando a riprodurre il bip di notifica (o menzione di bip) nella chat SO utilizzando un'estensione di Chrome, ma non riesco a farlo correttamente (se è addirittura possibile). Ho provato il seguente codice:Riproduzione del segnale acustico nella chat SO

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

Ma io ottenere il seguente errore:

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

C'è un modo per utilizzare il SO chat 'modulo' audio/giocatore di giocare il bip @mention?

UPDATE

So che posso installare il mio proprio 'audio player', ma voglio usare il lettore audio che viene utilizzato nella chat qui su SO e voglio usare per il segnale acustico di notifica.

Ho caricato il mio codice completo in un GitHub gist che fa parte di this project. La linea in cui sto cercando di chiamare il lettore audio è 224.

+0

In quale file hai messo questo codice? Immagino che il codice non venga eseguito sulla pagina, ma piuttosto la pagina di sfondo per l'estensione. – mowwwalker

+0

@Walkerneo Sto eseguendo questo in uno dei file JS "content_scripts". – PeeHaa

+0

@Walkerneo Ho aggiunto un collegamento al progetto per poterlo verificare. – PeeHaa

risposta

3

Si tratta di una cosa sandbox, suppongo che non sia consentito eseguire script dalla pagina, quindi credo che i plugin contino.
Questo noto il suo solo una questione di giocare al di fuori della sandbox ....

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/*" 
    ] 
} 

Potete vedere alcune cose sulla comunicazione con la pagina qui ... http://code.google.com/chrome/extensions/content_scripts.html

3

Perché non basta:

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

Chrome ha il supporto audio (le versioni recenti comunque), quindi questo dovrebbe essere più che bene. Questo è quello che uso nella mia estensione.

+0

Abbastanza corretto, questa è la tua prerogativa. Ma funziona così, ed è semplice. Hai un link a qualsiasi documentazione per questo modulo di chat SO così posso provare a rispondere alla tua domanda? –

+0

Ho aggiornato un collegamento nella mia domanda al codice completo. Non ci sono documenti per la funzionalità perché è SO chat interna. – PeeHaa

+2

Per estendere su questo ... che dire ... 'nuovo Audio (chrome.extension.getURL (" so.mp3 ")). Play();' e so.mp3 viene da http: //or.cdn. sstatic.net/chat/so.mp3 – PAEz

Problemi correlati