瀏覽器中音訊相容性問題(上)
參考文章:http://blog.csdn.net/www3300300/article/details/17709219
我參考了上面連結的文章,由於這篇文章寫於2013年,目前已經不能滿足需求了。
下面我將把我參考改進後的做法列出來:
(由於我們公司只要求相容 ie(8及以上版本) Firefox chrome ,所以這些瀏覽器上是沒問題的。opera 瀏覽器上我也試了是可以的,360安全瀏覽器之類的由於使用chrome的核心所以也是沒問題的 ,別的瀏覽器沒試過了)
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title></title>
</head>
<script src="Scripts/jquery-1.11.1.min.js"></script>
<script src="Scripts/test.js" type="text/javascript"></script>
<body>
<div id="__alert_sound">
<div class="pinkBox" style="display: none;" >
<audio id="player">
<source src="http://yinyueshiting.baidu.com/data2/music/242216583/2422094427200128.mp3?xcode=3c4cf764253d271f7e919dd56dd3c83c" />
<!--這裡是MP3型別的歌-->
<source src="http://yinyueshiting.baidu.com/data2/music/242216583/2422094427200128.mp3?xcode=442882b98b9d2ee6c7d4e558c0a93524" />
<!--這裡是ogg or wav-->
<source src="http://yinyueshiting.baidu.com/data2/music/242216583/2422094427200128.mp3?xcode=818d3878b8479145ec0a60cf41a4a187" />
<!--這裡是ogg or wav-->
</audio>
</div>
<input type="button" id="play" value="Play" />
<input type="button" id="pause" value="Pause" onclick="javaScript: { $('.pinkBox #player').get(0).pause(); player.pause(); }" />
</div>
</body>
</html>
test.js
var changeaudio = false;
$(function () {
init();
})
function init(){
audioPlayer();
var strurl = "http://yinyueshiting.baidu.com/data2/music/242216583/2422094427200128.mp3?xcode=3c4cf764253d271f7e919dd56dd3c83c";
replaceAudio($(".pinkBox"), strurl , addReBind);
}
function replaceAudio(selector, src, addBind) {
var sUserAgent = navigator.userAgent.toLowerCase();
if (sUserAgent.match(/msie ([\d.]+)/) || (sUserAgent.indexOf('trident') != -1 && sUserAgent.indexOf('rv') != -1)) {
selector.empty().html('<object id="player" classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95"'
+ ' codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0">'
+ '<param name="allowScriptAccess" value="always" />'
+ '<param name="AutoStart" value="0" />'
+ '<param name="Src" value="' + src + '" />'
+ '<param name="ShowControls" value="false">'
+ '</object>');
changeaudio = true;
if (addBind != null && addBind != "") {
addBind();
}
}
}
function addReBind() {
$("#play").unbind().click(function () {
if (player.currentPosition != 0)
player.currentPosition = 0;
player.play();
isPlayEnd(changeaudio ? player : $("#player")[0], function () { alert("OK");});
});
$("#pause").unbind().click(function () {
player.pause();
});
}
function isPlayEnd(shapeAudio, callback) {
var is_playFinish = setInterval(function () {
if (shapeAudio.ended || (shapeAudio.duration!=0 && shapeAudio.playState==0) ) {
window.clearInterval(is_playFinish);
if ( callback!=null &&callback != "" )
callback();
}
}, 10);
}
function audioPlayer() {
$("#play").click(function () {
if ($('.pinkBox #player').get(0).currentTime != 0)
$('.pinkBox audio').get(0).currentTime = 0;
$('.pinkBox #player').get(0).play();
});
$("#pause").click(function () {
$('.pinkBox #player').get(0).pause();
});
}
//檢測當前瀏覽器所在的裝置型別及瀏覽器型別版本號
function platformType() {
var platform = "";
var sUserAgent = navigator.userAgent.toLowerCase();
if (sUserAgent.match(/ipad/i) == "ipad") { platform = "ipad"; }
if (sUserAgent.match(/iphone os/i) == "iphone os") { platform = "iphone"; }
if (sUserAgent.match(/midp/i) == "midp") { platform = "midp"; }
if (sUserAgent.match(/rv:1.2.3.4/i) == "rv:1.2.3.4") { platform = "rv"; }
if (sUserAgent.match(/ucweb/i) == "ucweb") { platform = "ucweb"; }
if (sUserAgent.match(/android/i) == "android") { platform = "android"; }
if (sUserAgent.match(/windows ce/i) == "windows ce") { platform = "windows_ce"; }
if (sUserAgent.match(/windows mobile/i) == "windows mobile") { platform = "windows_mobile"; }
if (sUserAgent.indexOf("windows phone") != -1) { platform = "windows_phone"; }
if (sUserAgent.match(/msie ([\d.]+)/))
{ platform += "-" + "ie|" + sUserAgent.match(/msie ([\d.]+)/)[1]; }
else if (sUserAgent.indexOf('trident') != -1 && sUserAgent.indexOf('rv') != -1)
{ platform += "-" + "ie|" + sUserAgent.match(/rv:(\d+\.\d+)/)[1]; } //相容模式下的ie
else if (sUserAgent.match(/chrome\/([\d.]+)/)) { platform += "-" + "chrome"; }
else if (sUserAgent.match(/firefox\/([\d.]+)/)) { platform += "-" + "firefox"; }
else if (sUserAgent.match(/opera.([\d.]+)/)) { platform += "-" + "opera"; }
else if (sUserAgent.match(/version\/([\d.]+).*safari/)) { platform += "-" + "safari"; }
//document.writeln("您的瀏覽裝置為:");
return platform;
}
相關推薦
瀏覽器中音訊相容性問題(上)
參考文章:http://blog.csdn.net/www3300300/article/details/17709219 我參考了上面連結的文章,由於這篇文章寫於2013年,目前已經不能滿足需求了。 下面我將把我參考改進後的做法列出來: (由於我們公司只
eos原始碼賞析(二十三):默克爾樹在EOS中的應用(上)
前面文章中在分析push_transactioneos原始碼賞析(二十):EOS智慧合約之push_transaction的天龍八“步”以及區塊簽名eos原始碼賞析(二十一):EOS智慧合約之區塊簽名的天龍八“步”的時候都提到了默克爾樹,受限於篇幅未做具體分析。
Unity 3D中的射線(上)
圖6 控制檯中輸出的碰撞檢測資訊 利用二次發射射線的方式檢測內部物體 有的時候我們要檢測的物體在其他物體的內部,並且這兩個物體都具有碰撞器,用射線檢測返回的是第一個物體的資訊。在這種情況下,我們需要使用二次射線發射的做法,即以第一次射線碰撞的外層物體的碰撞點作為第二次射線發射的起點,沿原來方向發射射線,
Android外掛化的相容性(上):Android O的適配
首先宣告,《Android外掛化開發指南》這本書所介紹的Android底層是基於Android6.0(API level 23)的,而本書介紹的各種外掛化解決方案,以及配套的70多個例子,在Android7.0(API level 24)手機上測試都是能正常工作的。 如果讀者您的手機是
深度學習(4)——強度非均勻性下影象分割的水平集方法及其在MRI中的應用(上)
強度非均勻性下影象分割的水平集方法及其在MRI中的應用 摘要 強度不均勻性經常出現在真實世界的影象中,這對影象分割提出了相當大的挑戰。最廣泛使用的影象分割演算法是基於區域並且通常依賴於感興趣區域中影象強度的均勻性,這通常由於強度不均勻性而不能提供準確
從0開發3D引擎(十):使用領域驅動設計,從最小3D程式中提煉引擎(上)
[TOC] 大家好,本文使用領域驅動設計的方法,重新設計最小3D程式,識別出“使用者”和“引擎”角色,給出各種設計的檢視。 # 上一篇博文 [從0開發3D引擎(九):實現最小的3D程式-“繪製三角形”](https://www.cnblogs.com/chaogex/p/12234673.html)
網頁上實現匯出excel表格時,怎樣在後臺生成excel後,讓表格在瀏覽器中自動下載(larval框架)
Html程式碼片段: <form method="post" id="export_form" action="action" style="float: left"> <input id="export_info" type="hidden" n
在VMware Workstation中批量創建上千臺虛擬機(上)
vnc workstation VMware Workstation 是我們經常使用的虛擬機軟件,其功能強大,性能較好。大多數用戶都會在"圖形界面"中創建虛擬機、修改虛擬機配置、添加虛擬機參數,或者使用"克隆"功能創建多個虛擬機,這些都無需介紹。但是你有沒有想過● 將 VMware Workstati
Python學習:基本數據類型與變量(中)與基礎之條件及循環(上)
sets 但是 while循環 spl view put 算數運算 sse 邏輯運算 一.數據類型和變量 1.可變與不可變數據類型 可變數據類型:在id不變的情況下,數據類型內部的元素可以改變 列表 字典 不可變數據類型:value改變,id也跟著改變
ORCAD16.6中原理圖DRC檢查(上)
Cadence Orcad DRC 檢查 在做原理圖的時候,差點犯了個致命問題,本該是同一網絡的net,結果兩邊的net名字不一致,幸好被老大發現了,要不然就報廢了。 於是乎就去折騰下 DRC 檢查的功能,以前也沒用過。 好了打開 DRC 檢查的菜單步驟: 1、打開 ORCAD 軟件,先選中整
Java面試題全集(上)(中)(下) (轉)+自己總結
display png net lan ont tail java面試 tar ref Java面試題 自己總總結 https://www.cnblogs.com/songanwei/p/9366427.html Java面試題全集(上) https://blog.csdn
Java中JNI的使用(上)
android immediate 返回值 str byte 文件 field 方式 touch JNI 全稱是 Java Native Interface。是在 Java 和 Native 層(包括但不限於C/C++)相互調用的接口規範。 JNI 在 Java 1.1中正
十、字典(上):什麼是字典及如何訪問、新增、修改、刪除字典中的值
文章目錄 (一)、什麼是字典 (二)、訪問字典中的值 (三)、在字典中新增鍵 - 值對 (四)、修改字典中的值 (五)、刪除字典中的值
app中的webview通識篇(上)
前言 如果你還是第一次與app合作開發webview的頁面,那麼對於如何除錯,可能有哪些問題可能是不夠了解的。本文嘗試性的根據自己的經驗給大家一個入門級別的瞭解,如果是大佬級別的,可以繞路了。 webview協議約定 為了更好的在app中除錯開發我們的移動頁面(h5),我們需要與app開發人員約定一些基
axios在vue中的應用(二)—— 表單提交上傳圖片
使用axios實現圖片預覽、圖片上傳等功能: methods: { // 圖片預覽 priviewImg(e) { // ... }, // 提交表單 sumitRefund() { let fd = new FormDat
C++筆記 第六十四課 C++中的異常處理(上)---狄泰學院
如果在閱讀過程中發現有錯誤,望評論指正,希望大家一起學習,一起進步。 學習C++編譯環境:Linux 第六十四課 C++中的異常處理(上) 1.C++異常處理 C++內建了異常處理的語法元素try…catch… try語句處理正常程式碼邏輯 catch語句處理異常情況 try
第8章 CSS3中的變形與動畫(上)
變形--旋轉 rotate() 旋轉rotate()函式通過指定的角度引數使元素相對原點進行旋轉。它主要在二維空間內進行操作,設定一個角度值,用來指定旋轉的幅度。如果這個值為正值,元素相對原點中心順時針旋轉;如果這個值為負值,元素相對原點中心逆時針旋轉。如下圖所示: HTML程式碼: <div c
十、字典與 set(上):什麼是字典及如何訪問、新增、修改、刪除字典中的值
(一)、什麼是字典 字典:字典是放在花括號中一系列的鍵-值表示 # This is a dict student_0 = {'name': 'zhangsan', 'age': '20'} 冒號
18 | 散列表(上):Word文件中的單詞拼寫檢查功能是如何實現的?
Word 這種文字編輯器你平時應該經常用吧,那你有沒有留意過它的拼寫檢查功能呢?一旦我們在 Word 裡輸入一個錯誤的英文單詞,它就會用標紅的方式提示“拼寫錯誤”。Word 的這個單詞拼寫檢查功能,雖然很小但卻非常實用。你有沒有想過,這個功能是如何實現的呢? 其
java中字元與字串的前世今生(上)
Unicode碼錶 在介紹char型別之前我們先介紹一下Unicode.以下是百度百科給出的解釋: Unicode(統一碼、萬國碼、單一碼)是電腦科學領域裡的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為