Tworzę rozszerzenie przeglądarki Firefox i nie udało mi się odtworzyć dźwięku, który znajduje się w katalogu data
dodatku.Odtwarzanie dźwięku z katalogu danych rozszerzenia firefox
Pierwszą rzeczą Próbowałem grał go w treści skryptu w ten sposób:
var soundFile = self.options.soundFile; (new Audio(soundFile)).play();
gdzie
self.options.soundFile
jest opcja, że odnosi się do pliku zasobów wdata
katalogu. Ale spotykam ograniczeń zabezpieczeń:Security Error: Content at http://example.com may not load or link to resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/stackoverflow-reiew-helper/data/complete.oga.
Potem znalazłem sposób, aby odtworzyć dźwięki w
main.js
scenariusza (tu: How to play audio in an extension?):var data = require('sdk/self').data; exports.main = function() { var {Cc, Ci} = require("chrome"); var sound = Cc["@mozilla.org/sound;1"].createInstance(Ci.nsISound); sound.play(data.url('complete.oga')); };
Ten jeden nie powiedzie się z następującym wyjątkiem:
NS_ERROR_XPC_BAD_CONVERT_JS: Could not convert JavaScript argument arg 0 [nsISound.play] undefined 8 Traceback (most recent call last): File "resource://gre/modules/NetUtil.jsm", line 140, in null aCallback(pipe.inputStream, aStatusCode, aRequest); File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/net/url.js", line 49, in null resolve(data); File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 123, in then else result.then(resolved, rejected) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 55, in effort try { return f(options) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 143, in resolve while (pending.length) result.then.apply(result, pending.shift()) File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 37, in then return { then: function then(resolve) { resolve(value) } } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 117, in resolved function resolved(value) { deferred.resolve(resolve(value)) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/core/promise.js", line 55, in effort try { return f(options) } File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/addon/runner.js", line 90, in onLocalizationReady run(options); File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/addon-sdk/lib/sdk/addon/runner.js", line 134, in run quit: exit File "resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/stackoverflow-reiew-helper/lib/main.js", line 8, in exports.main sound.play(data.url('complete.oga'));
Jeśli zastąpię
sound.play(...)
przezsound.beep
, otrzymam niezły dźwięk domyślnego systemu. Tak więc powinno być coś złego w przekazywaniu ścieżki zasobu do funkcji.
Jeśli ma to jakikolwiek wpływ, korzystam z narzędzia do tworzenia dodatków online.
Proszę zaproponować rozwiązanie odtwarzania rozwiązania odtwarzania zasobów audio.
Pierwsze rozwiązanie działa idealnie (po zastąpieniu pliku ogg wav). Ale drugi jest przekazywany w trybie cichym, bez błędów w 'Error Console' i bez dźwięku. Jaki może być tego powód, a może w jaki sposób mogę go znaleźć? – Alexey
@Alexey: Masz rację, ''
Dziękuję. Oba warianty działają doskonale. – Alexey