Çözüm rehberi · Mikrofon testi
"SecurityError" ve "navigator.mediaDevices is undefined" nasıl düzeltilir
Tarayıcılar mikrofon ve kamera erişimine yalnızca güvenli sayfalarda izin verir. Adres https:// yerine http:// ile başlıyorsa veya sayfa izinsiz bir çerçevedeyse, tarayıcı SecurityError verir ya da navigator.mediaDevices'ı tamamen gizler; bu da "TypeError: Cannot read properties of undefined (reading getUserMedia)" hatasına yol açar. Çözüm güvenli bir adres kullanmaktır.
Hızlı çözüm kontrol listesi
- 1Adres çubuğuna bakın. Sayfa https:// ile başlamalı veya localhost olmalıdır.
- 2Adreste http:// yerine https:// yazın veya siteyi güvenli bir bağlantıdan yeniden açın.
- 3Bir uygulamanın ya da gömülü görünümün içindeyseniz sayfayı normal bir tarayıcı sekmesinde açın.
- 4Site için mikrofona ve kameraya izin verin, yenileyin, sonra tekrar Denetle'ye basın.
- 5Siteyi siz yönetiyorsanız bir sertifika kurun ve tüm http trafiğini https'e yönlendirin.
Tarayıcılar neden güvenli bağlam ister
Mikrofon ve kamera hassastır. Tarayıcılar bunları yalnızca güvenli bir bağlamda sunar; böylece paylaşılan bir ağdaki saldırgan sayfayı değiştirip sizi gözetleyemez. Düz http sayfaları, 192.168.x.x gibi yerel ağ adresleri ve uygulama içi birçok görünüm, localhost'un aksine bu koşulu karşılamaz.
Bir izin politikası da çerçevedeki sayfa için cihazı engelleyebilir. Barındıran sayfa, çerçeve için mikrofon ve kameraya izin vermelidir.
Geliştirici kontrol listesi
Geçerli sertifikayla HTTPS üzerinden sunun, yerel çalışmayı localhost'ta test edin ve getUserMedia'yı çağırmadan önce window.isSecureContext değerini denetleyin. Gömmelerde iframe'e allow="microphone; camera" ekleyin ve izni kaldıran sandbox'lardan kaçının. Mikrofon testi karşılaştırabilmeniz için HTTPS üzerinden sunulur.
SSS
Sık sorulan sorular
navigator.mediaDevices neden undefined?
Sayfa güvenli bir bağlamda değil, bu yüzden tarayıcı medya API'sini gizler. HTTPS üzerinden veya localhost'ta açın.
localhost güvenli sayılır mı?
Evet. Tarayıcılar localhost'u güvenli kabul eder, yani sertifikasız geliştirme yapabilirsiniz. Diğer yerel adresler HTTPS ister.
getUserMedia'da SecurityError nedir?
Tarayıcı reddetti; çünkü sayfa güvensiz, kısıtlı bir çerçevede yüklendi veya bir politika cihazı yasaklıyor.
Verilerim http sayfasında güvende mi?
http sayfalarında mikrofon ve kamera kullanmaktan kaçının. Sayfanın yolda değiştirilememesi için https kullanın.