audioはios微信ブラウザで自動再生の問題をサポートしていません
6790 ワード
最近、微信の公衆番号H 5ページを開発した際、audioタグはiosシステム上で自動再生ができず、ajaxコールバックではPlayが呼び出せないことに気づき、多くの資料を探してやっと解決しました.
まずhtmlに次のコードを追加します.
私の最初のjsコード:
iOSシステムの微信ブラウザでは機能しないことがわかり、資料を探して最初の解決策を得ました.
上のコードをコールバック関数に入れると、まだ機能していないことがわかり、次のような場合に有効になることがわかりますが、res.rel==1に戻るように要求した場合、音楽を再生する必要があります.そのため、自分のニーズを満たしていません.
だから私は問題がどこにあるか知っています.ajaxコールバックでaudioラベルがトリガーされないので、資料を探して次の言葉を得ました.
トラフィックの浪費を避けるために、ios携帯電話のブラウザはデフォルトでメディアファイルが自動的にロードされて再生されないことを規定しています.ロード再生のコード文は、clickイベントなどのユーザーが直接操作するイベントで実行する必要があります.XHRのloadイベントでa.play()を実行することは許されません.
ajaxを同期方式に変更するソリューションが得られた.clickイベントをずっと終わらせない.
これでバグが解決するには、まだいくつかの細部の問題に注意していないかもしれませんが、ゆっくりと改善しなければなりません.
まずhtmlに次のコードを追加します.
html
<audio id="bg-music" src="s.wav" preload="auto">
audio 。
audio>
私の最初のjsコード:
js
//
function changeStatus(PostObj) {
$.ajax({
url: PostObj.url,
type:'post',
datatype: 'json',
data:PostObj,
success: function(data){
if(data.rel == 1){
var audio = document.getElementById("bg-music");
audio.play();
msg(data.msg,function () {
window.location.href= window.location.href+'?time='+((new Date()).getTime());
});
}else{
msg(data.msg);
}
}
});
}
iOSシステムの微信ブラウザでは機能しないことがわかり、資料を探して最初の解決策を得ました.
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">script>
<script>
// , , iPhone
var audio = document.getElementById("bg-music");
audio.play();
// Weixin JSAPI WeixinJSBridgeReady
document.addEventListener("WeixinJSBridgeReady", function () {
audio.play();
}, false);
script>
上のコードをコールバック関数に入れると、まだ機能していないことがわかり、次のような場合に有効になることがわかりますが、res.rel==1に戻るように要求した場合、音楽を再生する必要があります.そのため、自分のニーズを満たしていません.
function changeStatus(PostObj) {
var audio = document.getElementById("bg-music");
audio.play();
document.addEventListener("WeixinJSBridgeReady", function () {
audio.play();
}, false);
$.ajax({
url: PostObj.url,
type:'post',
datatype: 'json',
data:PostObj,
success: function(data){
if(data.rel == 1){
msg(data.msg,function () {
window.location.href= window.location.href+'?time='+((new Date()).getTime());
});
}else{
msg(data.msg);
}
}
});
}
だから私は問題がどこにあるか知っています.ajaxコールバックでaudioラベルがトリガーされないので、資料を探して次の言葉を得ました.
トラフィックの浪費を避けるために、ios携帯電話のブラウザはデフォルトでメディアファイルが自動的にロードされて再生されないことを規定しています.ロード再生のコード文は、clickイベントなどのユーザーが直接操作するイベントで実行する必要があります.XHRのloadイベントでa.play()を実行することは許されません.
ajaxを同期方式に変更するソリューションが得られた.clickイベントをずっと終わらせない.
function changeStatus(PostObj) {
$.ajax({
url: PostObj.url,
type:'post',
datatype: 'json',
data:PostObj,
async: false,//
success: function(data){
if(data.rel == 1){
var audio = document.getElementById("bg-music");
audio.play();
document.addEventListener("WeixinJSBridgeReady", function () {
audio.play();
}, false);
msg(data.msg,function () {
window.location.href= window.location.href+'?time='+((new Date()).getTime());
});
}else{
msg(data.msg);
}
}
});
}
これでバグが解決するには、まだいくつかの細部の問題に注意していないかもしれませんが、ゆっくりと改善しなければなりません.