有公司在我們app上面投廣告,發現他們的h5頁面音樂不會自動播放。
經過幾番折騰,確認以下方案可用。

1.開啟js支援

 WebSettings setings = mWebView.getSettings();
 setings.setJavaScriptEnabled(true);

2.設定WebViewClient

 mWebView.setWebViewClient(new CustomWebViewClient());
 //CustomWebViewClient為自定義WebViewClient()
  private final class CustomWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            mWebView.loadUrl(url);
            return true;
        }

        //url載入失敗
        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
            //做自己的一些處理,比如載入我們自定義的view或者給使用者一個提示
        }
        //頁面載入完成的時候呼叫
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @SuppressLint("NewApi")
        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            mWebView.loadUrl("javascript:startPlay()");
            //可以做一些載入完成的處理,比如隱藏正在載入的動畫
        }
        //頁面開始載入的時候呼叫
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            //可以做一些載入完成的處理,比如顯示正在載入的動畫
        }

    }

重點在onPageFinished這個方法,在確認web載入完成後,去呼叫h5中的js音樂播放方法。

h5中的startPlay()方法只有一行程式碼,開啟音樂播放。

function startPlay(){
    music.play().loop(); //music時音樂播放器物件
}

至於為什麼h5在載入完成後,自己去開啟音樂播放無法成功,我不是很清楚。但是通過這個回撥是可以成功的。
以上。