2013-05-08 8 views
8

से ऑडियो चलाएं मैं फ़ायरफ़ॉक्स एक्सटेंशन बना रहा हूं और मैं ऐड-ऑन की data निर्देशिका में स्थित ध्वनि चलाने में विफल रहा हूं।फ़ायरफ़ॉक्स एक्सटेंशन की डेटा निर्देशिका

  1. पहली बात यह है कि मैं इसे एक सामग्री स्क्रिप्ट में इस तरह से खेल रहा था की कोशिश की है:

    var soundFile = self.options.soundFile; 
    (new Audio(soundFile)).play(); 
    

    जहां self.options.soundFile एक विकल्प है कि data निर्देशिका में संसाधन फ़ाइल को संदर्भित करता है।

    Security Error: Content at http://example.com may not load or link to resource://jid0-a02no8rrtu2pbize7g7sszzo0z8-at-jetpack/stackoverflow-reiew-helper/data/complete.oga. 
    
  2. तब मैं main.js लिपि में एक तरह से लगता है खेलने के लिए मिल गया है (यहाँ: 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')); 
    }; 
    

    यह एक निम्न अपवादों के साथ विफल रहता है:

    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')); 
    

    यदि मैं sound.play(...)sound.beep के साथ प्रतिस्थापित करता हूं, तो मुझे एक अच्छी डिफ़ॉल्ट प्रणाली ध्वनि मिलती है। इसलिए, फ़ंक्शन के संसाधन संसाधन को पास करने में कुछ गड़बड़ होनी चाहिए।

यदि यह किसी भी तरह से मायने रखता है, तो मैं ऑनलाइन एड-ऑन बिल्डर का उपयोग कर रहा हूं।

कृपया विस्तार ऑडियो संसाधनों को चलाने का समाधान खेलने का एक समाधान सुझाएं।

उत्तर

7

nsISound.play()nsIURI उदाहरण लेता है, एक स्ट्रिंग नहीं। आप nsIIOService.newURI() पहले के माध्यम से इसे बनाने के लिए:

var uri = Cc["@mozilla.org/network/io-service;1"] 
      .getService(Ci.nsIIOService) 
      .newURI(data.url('complete.oga'), null, null); 
sound.play(uri); 

मैं इस दृष्टिकोण तथापि के खिलाफ की सिफारिश करेंगे, nsISound.play() एपीआई pretty much deprecated है और वैसे भी ogg फ़ाइलें खेलने में सक्षम नहीं IMHO।

Audio कन्स्ट्रक्टर को उचित HTML दस्तावेज़ तक पहुंच की आवश्यकता है। सबसे आसान तरीका है एक SDK आधारित विस्तार में एक पाने के लिए page-worker module उपयोग कर रहा है:

require("page-worker").Page({ 
    contentScript: "new Audio('complete.oga').play()", 
    contentURL: data.url("blank.html") 
}); 

दोनों अपने ध्वनि फ़ाइल और blank.html (एक खाली HTML फ़ाइल) विस्तार के data/ निर्देशिका में स्थित होने की जरूरत है - ध्यान दें कि कैसे ऑडियो फ़ाइल एक सापेक्ष यूआरएल के माध्यम से लोड किया जाता है। अभी मुझे एक्सटेंशन में खाली HTML फ़ाइल रखने से बचने का कोई तरीका नहीं दिख रहा है, एक्सटेंशन के बाहर HTML फ़ाइलों को एक्सटेंशन फ़ाइलों तक पहुंच नहीं है और उन्हें नहीं चलाया जा सकता है।

+0

पहला समाधान पूरी तरह से काम करता है (ओवी फाइल को एक वाव के साथ बदलने के बाद)। लेकिन दूसरा त्रुटि चुपचाप पारित हो जाती है जिसमें 'त्रुटि कंसोल' में कोई त्रुटि नहीं होती है और कोई ध्वनि उत्पन्न नहीं होती है। इसका कारण क्या हो सकता है या शायद मैं इसे कैसे ढूंढ सकता हूं? – Alexey

+0

@Alexey: आप सही हैं, '

+0

धन्यवाद। दोनों प्रकार पूरी तरह से काम करते हैं। – Alexey

संबंधित मुद्दे