2014-04-13 9 views
10

मैं पता लगाने के लिए किया जाए या नहीं माइक्रोफोन अनुमतियों अपनी साइट पर प्रदान किया गया है जब यह वास्तव में निम्नलिखित की तरह कुछ चलने के बिना लोड करता है पसंद आया होगा:कैसे करता है, तो माइक्रोफोन अनुमतियाँ क्रोम में प्रदान किया गया है पता लगाने के लिए

navigator.webkitGetUserMedia({audio: active}, 
    function(){alert('worked')}, 
    function(){alert('failed')}); 

वहाँ है यह पता लगाने के लिए एक सरल एपीआई है कि उपयोगकर्ता ने मेरे एप्लिकेशन में माइक्रोफ़ोन पहुंच स्थायी रूप से दी है (जो https पर चलता है)?

उत्तर

0

आपको पहले से ही अनुमतियों की जांच के लिए मतदान विधि मिल गई है। यहाँ MDN से कुछ जानकारी है: https://developer.mozilla.org/en-US/docs/Web/API/Navigator.getUserMedia

और कुछ और:

navigator.getMedia (
// constraints 
    { 
     video: true, 
     audio: true 
    }, 

    // successCallback 
    function(localMediaStream) { 
     var video = document.querySelector('video'); 
     video.src = window.URL.createObjectURL(localMediaStream); 
     video.onloadedmetadata = function(e) { 
     // Do something with the video here. 
     }; 
    }, 

    // errorCallback 
    function(err) { 
    console.log("The following error occured: " + err); 
    } 

); 
+0

वह पूछताछ कर रहा है कि अनुमति राज्य कैसे प्राप्त करें, इसका मतलब है कि उपयोगकर्ता मीडिया स्ट्रीम – Endless

+0

प्राप्त करने के बिना आप स्क्रीन क्षेत्र के बाहर मीडिया स्ट्रीम बना सकते हैं, तो आपके पास आपकी जांच और उपयोगकर्ता को पता/दिमाग नहीं है। एचटीएमएल 5 गेम के लिए बैक बफर कैनवास की तरह। – Zezura

5

आप आशा है कि हो सकता है कि यह अनुमति एपीआई से सुलभ हो जाएगा, लेकिन यह: https://developer.mozilla.org/en-US/docs/WebRTC

यहाँ एक उदाहरण है नहीं है :(

शायद इस सुविधा में यह बाकी की तरह काम कर सकता है:

navigator.permissions.query(
    // {name: 'video'} <-- doesn't work 
    // {name: 'audio'} <-- doesn't work 
    {name: 'geolocation'} 
    // {name: 'notifications'} 
    // {name: 'midi', sysex: false} 
    // {name: 'midi', sysex: true} 
    // {name: 'push', userVisibleOnly: true} 
    // {name: 'push'} // without userVisibleOnly isn't supported in chrome M45, yet 
).then(function(permissionStatus){ 

    console.log(permissionStatus.state); // granted, denied, prompt 

    permissionStatus.onchange = function(){ 
     console.log("Permission changed to " + this.state); 
    } 

}) 

एकमात्र तरीका जिसे मैं इसे संभव देखता हूं, यदि आप अनुमति के लिए पूछते समय स्थानीय स्टोरेज में एक कुंजी/मूल्य वस्तु के साथ स्वयं को ट्रैक करते हैं।

दुर्भाग्य से यह आपको सूचित नहीं करता है जब यह

// initialization 
if(localStorage.getItem("voice_access") === null){ 
    // just assume it is prompt 
    localStorage.setItem("voice_access", "prompt"); 
} 

// Then somewhere 
navigator.getUserMedia({audio: true}, function(e){ 

    // http://stackoverflow.com/q/15993581/1008999 
    // 
    // In chrome, If your app is running from SSL (https://), 
    // this permission will be persistent. 
    // That is, users won't have to grant/deny access every time. 
    localStorage.setItem("voice_access", "granted"); 

}, function(err){ 
    if(err.name == "PermissionDismissedError"){ 
     localStorage.setItem("voice_access", "prompt"); 
    } 
    if(err.name == "PermissionDeniedError"){ 
     localStorage.setItem("voice_access", "denied"); 
    } 
}); 

आप अतिरिक्त प्रयास और इसके बाद के संस्करण इस कोड के साथ एक अच्छी छोटी आवरण का निर्माण और विस्तार कर सकता है बदल दिया गया है/करने की अनुमति एपीआई की जगह अधिक enum नामों को संभाल लें और अन्य टैब को बदलने पर broadcast एपीआई बनाएं। लेकिन यह इतना जटिल क्यों बनाते हैं ...? स्थानीय स्टोरेज 100% भरोसेमंद नहीं हो सकता है। इसे किसी भी समय अनुमति और भंडारण के साथ कहीं भी बदला जा सकता है

+0

ऊपर उल्लिखित पहला स्निपेट ऑडियो के लिए काम नहीं कर रहा है जैसा आपने इंगित किया है। लेकिन क्या वैसे भी हम स्थान की स्थिति के रूप में अपनी स्थिति पा सकते हैं? –

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

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