2012-03-06 3 views
5

Я пытаюсь воспроизвести звуковой сигнал уведомления (или указать звуковой сигнал) в чате SO с использованием расширения Chrome, но я не могу получить его правильно (если это возможно). Я попытался следующий код:Воспроизведение звукового сигнала в чате SO

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

Но я получаю следующее сообщение об ошибке:

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

Есть ли способ использовать SO чата «модуль» звук/проигрыватель для воспроизведения @mention звукового сигнала?

UPDATE

Я знаю, что могу настроить свой собственный «аудио-плеер», но я хочу использовать аудио-плеер, который используется в чате здесь на SO, и я хочу, чтобы использовать звуковой сигнал оповещения.

Я загрузил свой полный код в GitHub gist, который является частью this project. Линия, в которой я пытаюсь назвать аудиоплеер, - 224.

+0

В каком файле вы поместите этот код? Я предполагаю, что код не запускается на странице, а скорее справочная страница для расширения. – mowwwalker

+0

@Walkerneo Я запускаю это в одном из файлов JS «content_scripts». – PeeHaa

+0

@Walkerneo Я добавил ссылку на проект, чтобы вы могли проверить. – PeeHaa

ответ

3

Его песочница, я думаю, вам не разрешено выполнять сценарии со страницы, поэтому я думаю, что плагины рассчитывают на.
Это известно его только вопрос играть за пределами изолированной среды ....

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

Вы можете увидеть некоторые вещи на связь со страницей здесь ... http://code.google.com/chrome/extensions/content_scripts.html

3

Почему не просто:

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

Chrome имеет поддержку аудио (последние версии в любом случае), так что это должно быть очень хорошо. Это то, что я использую в своем расширении.

+0

Справедливо, это ваша прерогатива. Но этот способ работает и прост. У вас есть ссылка на любую документацию для этого модуля чата SO, чтобы я мог попытаться ответить на ваш вопрос? –

+0

Я обновил ссылку в своем вопросе до полного кода. Для этой функции нет документов, потому что это внутренний чат. – PeeHaa

+2

Чтобы расширить это ... как насчет ... 'new Audio (chrome.extension.getURL (« so.mp3 »)). Play();' и so.mp3 происходит из http: //or.cdn. sstatic.net/chat/so.mp3 – PAEz

Смежные вопросы