2014-01-16 63 views
-1

我一直在使用HTML5,我似乎無法讓視頻在所有瀏覽器中都能很好地播放。 IE支持HTML5視頻,但當視頻播放時,綠色透明背景覆蓋視頻。如果您不知道在您的IE瀏覽器上播放此video。這裏是一個Imgur截圖,IE11。有沒有一種方法可以真正檢測Internet Explorer是PHP還是Javascript

enter image description here

所以我周圍的方式是我轉換的視頻到SWF文件並執行以下

<?php 
     if (preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT'])) {?> 
     <div id="flashContent"> 
       <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="100%" id="flow" align="middle" style=""> 
       <param name="movie" value="/index.files/Flow_Double_Size_v01.swf" /> 
       <param name="quality" value="high" /> 
       <param name="play" value="true" /> 
       <param name="loop" value="true" /> 
       <param name="wmode" value="transparent" /> 
       <param name="scale" value="noscale" /> 
       <param name="menu" value="false" /> 
       <param name="devicefont" value="false" /> 
       <param name="salign" value="" /> 
       <param name="allowScriptAccess" value="sameDomain" /> 
     <!--[if !IE]>--> 
     <object type="application/x-shockwave-flash" data="/index.files/Flow_Double_Size_v01.swf" width="100%" height="100%"> 
     <param name="movie" value="/index.files/Flow_Double_Size_v01.swf" /> 
      <param name="quality" value="high" /> 
      <param name="play" value="true" /> 
      <param name="loop" value="true" /> 
      <param name="wmode" value="transparent" /> 
      <param name="scale" value="noscale" /> 
      <param name="menu" value="false" /> 
      <param name="devicefont" value="false" /> 
      <param name="salign" value="" /> 
      <param name="allowScriptAccess" value="sameDomain" /> 
      <!--<![endif]--> 
      <a href="http://www.adobe.com/go/getflash"> 
       <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /> 
      </a> 
      <!--[if !IE]>--> 
      </object> 
      <!--<![endif]--> 
     </object> 
     </div> 
     <?php }else{ ?> 
     <div class="video-container"> 
      <video autoplay="autoplay" loop class="bg-1"> 
      <source src="/index.files/html5video/Flow_Updates_MP4_Codec_v02.m4v" type="video/mp4"> 
      <source src="/index.files/html5video/Flow_Updates_MP4_Codec_v02.ogv" type="video/ogg"> 
      <source src="/index.files/html5video/Flow_Updates_MP4_Codec_v02.webm" type="video/webm"> 
      </video> 
     </div> 
     <?php }; ?> 

劇本所以我遇到的一個問題是飄飛閃光玩家不會被IE解釋,它只會播放任何東西,有一天播放下一個沒有。我會清除緩存並在我們的客戶端計算機上測試它,看看它們是否正在運行閃存攔截器,但它們不是。當我使用IE上的開發人員工具查看源代碼時,我發現條件語句甚至沒有被讀取。

我從CSS Tricks得到了PHP腳本我也更新,我在評論中發現有if (preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT'])) { }

如果有這種替代我將不勝感激腳本。我也嘗試了嵌入Flash的HTML5播放器的後備版本,但IE似乎沒有回落到它。我需要IE來特別播放SWF文件。

+0

在你是依靠瀏覽器的誠實本身報告給你的代碼兩種情況。使用JS,您可以檢查JS引擎中是否有特定的功能。我會盡力找到一些資源。 – MonkeyZeus

+0

http://stackoverflow.com/a/1042154/2191572並確保檢查評論50 +票或http://css-tricks.com/snippets/javascript/check-if-function-exists-before -calling/ – MonkeyZeus

+0

@MonkeyZeus如何使用Modernizr?這對於檢測瀏覽器功能通常非常方便,您可以將其減小到只包含您需要的內容。雖然一般同意 - 檢測功能而不是檢查特定的瀏覽器是最好的方法。 –

回答

0

我在評論中提到過這個,但是嗅探一個特定的瀏覽器總是會很痛苦。我知道IE11也對用戶代理字符串進行了一些更改,因此MSIE不再出現在它(源 - http://www.sitepoint.com/internet-explorer-11-review/)中,這可能是問題的根源。

更好的方法是檢測特定的功能。 Modernizr是一個非常棒的圖書館,使用起來相當簡單。例如,檢測H264支持可能涉及到這樣的事情:

if (Modernizr.video.h264 === false) { 
    // Do stuff 
} 

檢測視頻的支持似乎有點不可思議 - 鍍鉻返回"probably"上面的代碼,所以我會確保你做一些跨瀏覽器測試。

您還可以創建您自己的Modernizr版本,包括您需要的功能,所以它不必那麼重。

編輯:如果你需要在PHP中檢測到它,那麼你可以在用戶代理字符串中搜索"Trident"。我相信這應該工作。但是,除非絕對必要,否則我總是會避免瀏覽器嗅探,因爲您永遠不知道未來的瀏覽器會是什麼樣子。

+0

嗯,我認爲,自從我在2 - 3年前追溯它的文章以來,這一串php是我的原因。今晚晚些時候我會收集每個人的意見,看看哪一個最好。再次感謝! –

+0

另外,我們的客戶是一家公司,我建立的這個網站是爲了他們的內部員工,他們都在IE8上使用Windows Vista。長號:( –

+0

哎喲!我覺得你的痛苦:-( –

0

我建議你不要完全避免IE,因爲最新版本可以播放HTML5視頻。如果您檢查用戶瀏覽器的兼容性,如果它可以播放html5視頻,我認爲會更好。

http://html5test.com/compare/browser/ie-10/ie-11.html

,但如果你不想要一個巨大的圖書館只是爲了檢測瀏覽器,下面我幫你的代碼。

方法A - 供應商名稱:

var ie = (navigator.appName === 'Microsoft Internet Explorer') === true; 

方法乙 - 正則表達式:

var ie = (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) === true; 

方法Ç - 條件代碼(https://gist.github.com/padolsey/527683):

var ie = (function(){ 

    var undef, 
     v = 3, 
     div = document.createElement('div'), 
     all = div.getElementsByTagName('i'); 

    while (
     div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->', 
     all[0] 
    ); 

    return v > 4 ? v : undef; 
}()); 

希望的建議之一可以幫助你。如果沒有,希望你會找到最好的方式。

祝你好運。

+0

很抱歉,但A和B肯定是行不通的。navigator.appName顯然返回「網景」在IE11和MSIE不會出現在用戶代理字符串,但是你可能會搜索「Trident」 –

+0

另外,我不認爲C會在IE 10或更高版本中工作 - IE10取消了條件註釋 –

0

檢測Internet Explorer可能沒有必要在所有在這種情況下,這個問題似乎是與此particular video file。 IE可以播放大多數mp4視頻,但如果不喜歡視頻編碼的方式,它偶爾會失敗。如果你只是在嘗試,那麼當你使用自己的視頻時,它可能會工作得很好。

如果情況並非如此,要麼你死定了一套使用該視頻文件,或者你有你自己同樣的問題,我建議您用不同的編碼設置播放。 ffmpeg的通常是相當不錯的,你可以用這樣的命令啓動:

ffmpeg -i INPUTFILE -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 "OUTPUTFILE.mp4" 

看一看在documentation和嘗試一些不同的比特率和預設。與此同時,我會嘗試給videojs一個提醒,說他們的視頻在IE中不工作,看看他們是否可以修復它。

現在,如果你仍然不能解決問題,來檢測瀏覽器的最佳方式是在客戶端上,因爲用戶代理字符串是可以改變的。 99%的時間,你想做功能檢測,但是當你正在解決像這樣的瀏覽器特定的錯誤時,瀏覽器檢測是可以的。

您可以通過查找document.documentMode來檢測Internet Explorer。這是一個value that IE gives you告訴你它是否在兼容模式下運行。其他瀏覽器沒有這個屬性,這樣你就可以檢測到IE這樣的:

var isIE = 'documentMode' in document; 
+0

僅供參考,有條件的評論不再適用於IE10 –

+0

我糾正了。不要這樣做。 http://msdn.microsoft.com/en-us/library/ie/hh801214%28v=vs.85%29.aspx – brianchirls

+0

在Twitter上沒有迴應。 https://twitter.com/bchirls/status/424211441147588608問題歸檔。 https://github.com/videojs/videojs.com/issues/12 – brianchirls

相關問題