2011-11-18 58 views
15

Tôi đang làm việc trên một trang web có trò chuyện cho khách hàng, tuy nhiên, chúng tôi đang gặp sự cố với âm thanh trong iPad (iOS 5).Phát âm thanh trên iPad

Mục tiêu trên thực tế là iPad có hỗ trợ cho IE7 được ưu tiên.

Tôi đã thử những cách tiếp cận:

HTML5

<audio id="notification" preload="auto"> 
    <source src="audio/notification.ogg" type="audio/ogg" /> 
    <source src="audio/notification.mp3" type="audio/mpeg" /> 
</audio> 

Với một số javascript

var el = document.getElementById('notification'); 
el.play(); 

Một số javascript chức năng Tôi đã ăn cắp ở đâu đó mà trong thực tế là hai phương pháp khác nhau trong một hàm. Xin lưu ý rằng tập lệnh nằm trong một thư mục con, vì vậy đường dẫn chính xác.

function notify() { 
    var url = '../audio/notification.mp3'; 
    var a = document.createElement('audio'); 

    if(!!(a.canPlayType && a.canPlayType('audio/mpeg').replace(/no/, ''))) { 
     var sound = new Audio(url); 
     sound.load(); 
     sound.play(); 
    } else { 
     $('#notification').remove(); 
     var sound = $('<embed id="notification" type="audio/mpeg" src="'+url+'" loop="false" hidden="true" autostart="true" />'); 
     $(body).append(sound); 
    } 
} 

Cả hai phương pháp dường như không hoạt động. Tôi có làm điều gì sai?

Trả lời

25

Vâng, câu trả lời là hơi rõ ràng.

Sau rất nhiều chi tiêu thời gian làm nghiên cứu vv, tôi đã tìm thấy an article trong tài liệu chính thức của Safari nói:

Trong Safari trên iOS (cho tất cả các thiết bị, bao gồm cả iPad), nơi người dùng có thể trên mạng di động và được tính phí cho mỗi đơn vị dữ liệu, tải trước và tự động phát bị tắt. Không có dữ liệu nào được tải cho đến khi người dùng khởi tạo nó. Điều này có nghĩa là các phương thức JavaScript play() và load() cũng không hoạt động cho đến khi người dùng bắt đầu phát lại, trừ khi phương thức play() hoặc load() được kích hoạt bởi hành động của người dùng. Nói cách khác, nút Phát do người dùng khởi tạo hoạt động nhưng sự kiện onLoad = "play()" thì không.

Vì vậy, về cơ bản, bạn không thể khởi chạy âm thanh mà người dùng không kích hoạt âm thanh lúc đầu. Như giải pháp tôi tạo ra một nút tắt tiếng là tắt theo mặc định, vì vậy bạn phải bấm vào nó mà chơi âm thanh thông báo. Sau đó tôi có thể sử dụng Javascript để phát âm thanh mà không có sự tương tác của người dùng.

Cảm ơn Safari cho tương lai tuyệt vời này. Cảm ơn rất nhiều.

+1

Thú vị! –

+4

Gah, đến trên Apple, hành động của người dùng đang tải trang web, vì vậy * hai * hành động người dùng là bắt buộc (tải một trang, sau đó thực hiện một việc khác). Cùng một vấn đề với cố gắng kích hoạt bàn phím gốc. –

+0

@Tim S: Bạn có nói rằng, đối với một trang web cụ thể: khi người dùng tải trang, sau đó nhấp vào nút phát mà bạn có thể phát âm thanh bất cứ khi nào bạn thích trên trang đó? nói, để đáp ứng với một sự kiện di chuột qua? –

-1

Thử đặt MP3 làm nguồn đầu tiên thay vì nguồn thứ hai. IPad sử dụng để có một vấn đề mà nó luôn luôn chơi nguồn đầu tiên không có vấn đề gì (nó có thể đã được cố định bởi bây giờ mặc dù - nhưng nó có giá trị một thử).

Đồng thời thử thay đổi type thành audio/mp3.

+0

Thật không may, cả hai đều không hoạt động. Cảm ơn câu trả lời của bạn mặc dù. –

+0

Tỷ lệ cược. Bạn đã xác minh rằng nó hoạt động trên một trình duyệt máy tính để bàn? Vì vậy, bạn có thể đảm bảo đường dẫn đến tệp âm thanh là chính xác? –

+1

Tôi chắc chắn có thể xác nhận nó đã hoạt động trên Desktop. Ngoài ra, âm thanh nếu iPad là trên thực tế, haha! –

4

Apple iPad không cho phép phát âm thanh mà không cần người dùng nhấp vào trước đó khởi tạo nó.

Giải pháp: Thêm nút phát/tạm dừng.

App.toggle_audio = function(elem) { 
    var icon = elem.find("i"); 
    var playing = _.include(icon.attr('class').split(" "), "icon-pause") 
    if (playing) { 
    elem.html("<i class='icon-play'></i> " + App.translate_play_audio); 
    App.play_audio_toggle = false; 
    } else { 
    App.audio_file.load(); 
    elem.html("<i class='icon-pause'></i> " + App.translate_pause_audio); 
    App.play_audio_toggle = true; 
    } 
} 

Sau khi người dùng nhấp vào nút khi Audio được tải. Sau đó bạn có thể phát qua Javascript.

if (App.play_audio_toggle) { 
    App.audio_file.play(); 
    } 
+7

Tôi tình cờ gặp vấn đề này và tìm ra cách để giải quyết nó. Sau đó, quyết định đăng mã tôi sử dụng để trợ giúp người khác. – Hendrik

6

Khi bản phát hành iOS 6 cho iPad phát trong khi tải trực tuyến vẫn không được hỗ trợ cho iPad.

Đối với iPhone có âm thanh iOS 6 sẽ chỉ phát trong khi tải trên trang web html nếu có tai nghe được cắm vào giắc âm thanh trên iPhone.

+1

OMG nghiêm túc, LOL. – Aaron

Các vấn đề liên quan