Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Safari'de video elementinin autoplay politikası ve kullanıcı etkileşimi olmadan sesli oynatma çözümüm

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
37
Merhaba arkadaşlar, bugün başımı çok ağrıtan bir sorundan ve nasıl çözdüğümden bahsedeceğim. Bir projede, arka planda sessiz bir video döngüsü oynatmak istiyordum. Chrome ve Firefox'ta `muted` ve `autoplay` attribute'ları ile sorunsuz çalışıyordu ama Safari'ye geçtiğimde video bir türlü otomatik başlamadı. İlk başta kodumda bir hata aradım ama sorun ben değilmişim, Safari'nin çok sıkı autoplay politikası imiş.

🔥 Safari'nin Autoplay Engeli Nedir?

Safari (ve diğer modern tarayıcılar), kullanıcı deneyimini korumak için bir kural koymuş: Eğer bir video'nun sesi açıksa, otomatik oynatılabilmesi için mutlaka sayfada kullanıcı etkileşimi (click, tap gibi) olması gerekiyor. Sesi kapalı (`muted`) videolar ise genelde sorunsuz autoplay yapabiliyor. Ancak benim durumumda, video başlangıçta sessiz olsa da, sonradan JavaScript ile sesi açmam gerekiyordu ve işte bu noktada takıldım.

🎯 Çözüm Yolum: User Gesture'ı "Hatırlatmak"

Araştırmalarım sonucunda öğrendim ki, tarayıcılar kullanıcı etkileşimini bir nevi "izin" olarak kaydediyor. Bu izinle, video elementinin `play()` metodunu çağırabiliyorsunuz. Ancak bu izin senkron bir işlem içinde kullanılmak zorunda. Yani kullanıcı tıkladığı anda, o tıklamanın tetiklediği event handler'ı içinde `video.play()` veya `video.muted = false` gibi işlemleri yapmanız gerekiyor. Benim hatam, tıklamayı genel bir "izin" olarak alıp, 2 saniye sonra sesi açmaya çalışmaktı. Safari buna izin vermedi.

İşte benim bulduğum ve işe yarayan çözüm:

💻 Kullanıcı Etkileşimi ile Video Hazırlama Kodu

İlk yaptığım şey, sayfa yüklendiğinde videoyu sessiz ve autoplay ile başlatmak oldu. Daha sonra, kullanıcının ilk tıklamasını (örneğin bir "Sesi Aç" butonuna veya sayfanın herhangi bir yerine) yakalayıp, tam o anda videonun sesini açmaktı.

JavaScript:
// Video elementini seç
const backgroundVideo = document.getElementById('bgVideo');

// Sayfa yüklendiğinde, sessiz ve otomatik oynatmayı DENE
window.addEventListener('load', () => {
  backgroundVideo.muted = true;
  backgroundVideo.play().catch(e => {
    console.log("Autoplay engellendi, kullanıcı etkileşimi bekleniyor:", e);
  });
});

// Kullanıcının İLK etkileşimini (tıklama) yakala
let isUserInteracted = false;

document.body.addEventListener('click', function enableSound() {
  if (!isUserInteracted) {
    isUserInteracted = true;

    // Bu tıklama anında, videonun sesini aç ve oynatmaya devam et
    backgroundVideo.muted = false;

    // Eğer video duraklatılmışsa, tekrar oynat
    if (backgroundVideo.paused) {
      backgroundVideo.play();
    }

    // Event listener'ı kaldır (sadece ilk tıklama önemli)
    document.body.removeEventListener('click', enableSound);
  }
}, { once: false }); // 'once: true' da kullanılabilir.

⚠️ Dikkat Edilmesi Gerekenler ve Bonus Tüyo

Bu yöntemle, kullanıcı sayfada herhangi bir yere ilk kez tıkladığında, tarayıcı bu tıklamayı "izin" olarak kabul ediyor ve biz de tam o sırada `video.muted = false` diyerek sesi açabiliyoruz. Bu işlem senkron olduğu için Safari de itiraz etmiyor.

Bir diğer önemli nokta, video elementinin `play()` metodunun bir Promise döndürmesi. Eğer tarayıcı autoplay'a izin vermezse, bu Promise reject edilir. Yukarıdaki kodda bunu `catch` ile yakalayıp logladık. Bu, hata ayıklama için çok faydalı.

Bonus bir tüyo: Eğer video kaynağınızı dinamik olarak değiştiriyorsanız (`video.src = ...`), her yeni `src` atamasından sonra autoplay izninin sıfırlanabileceğini unutmayın. Bu durumda, kullanıcı etkileşimini tekrar beklemek zorunda kalabilirsiniz.

Sonuç olarak, tarayıcıların otomatik oynatma politikaları kullanıcı deneyimi için gerekli ve saygı duyulması gereken kurallar. Amacımız, bu kuralların içinde kalarak en iyi kullanıcı deneyimini sunmak.

Siz Safari'de benzer bir autoplay sorunu yaşadınız mı? Veya farklı tarayıcılar için daha temiz bulduğunuz bir çözümünüz var mı? Yorumlarda paylaşalım!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri