2011-07-19 51 views
0

我有一個YUI面板,我用它來在我們的網站上顯示flash vids。它在除了IE之外的所有broswers中工作得非常好(特別是8,因爲我不關心其餘的)。我正在使用AJAX調用返回視頻庫中標記中包含的數據。就像我說的,除了IE以外,每個瀏覽器都可以。這裏顯示和破壞面板的一段代碼:IE8 <object>標籤問題

YAHOO.namespace("MYSITE.widget.VideoPanel"); 
/** 
* @projectDescription MYSITE.widget.VideoPanel is an extension of the YAHOO.widget.Panel widget which adds MYSITE specific options and 
* adds ARIA roles if supported 
* requires MYSITE.js 
* @author web development 
* @version 1.0 
*/ 
MYSITE.widget.VideoPanel = function (id, cntnt, type) { 
    /** 
    * extend the constructor for YAHOO.widget.Panel 
    */ 
    MYSITE.widget.VideoPanel.superclass.constructor.call(this, 
      id || YAHOO.util.Dom.generateId(), 
     { 
      width: "550px", 
      height:"485px",   
      fixedcenter:true,              
      close: true, 
      underlay:"none", 
      draggable: false, 
      modal: true, 
      zindex:1001, 
      monitorresize:false, 
      visible: false 
     } 
    ); 

    // since the custom panel inherits from Panel, all its methods and properties are accessible through 'this' 
    if(cntnt){ 
     this.setHeader(""); 
     this.setBody(cntnt); 
     this.setFooter("");  
    } 

    var keyArray = ((type && type == "dialog") ? [YAHOO.util.KeyListener.KEY.ESCAPE] : [YAHOO.util.KeyListener.KEY.ESCAPE, YAHOO.util.KeyListener.KEY.SPACE]); 

    var kl = new YAHOO.util.KeyListener(document, { keys:keyArray },        
               { fn:this.hide, 
                scope:this, 
                correctScope:true }, "keyup"); 
                // keyup is used here because Safari won't recognize the ESC 
                // keydown event, which would normally be used by default 

    this.cfg.queueProperty("keylisteners", kl); 
    this.render(document.body); 
    this.body.tabIndex = 0; 
    if(MYSITE.aria){ 
     this.body.setAttribute("role", "alertdialog"); 
     this.body.setAttribute("aria-hidden", "true"); 
    } 
}; 

/** 
* declare the above constructor to inherit from Panel 
*/ 
YAHOO.lang.extend(MYSITE.widget.VideoPanel, YAHOO.widget.Panel, 
        { 
         show: function (el){        
          MYSITE.widget.VideoPanel.superclass.show.call(this); 
          this.keyingElement = el;  
          if(MYSITE.aria){ 
           this.body.setAttribute("aria-labelledby", YAHOO.util.Dom.generateId(el)); 
           this.body.setAttribute("aria-hidden", "false"); 
          } 
          this.body.focus(); 
         }, 
         hide: function(){ 
          var obj =document.getElementById('MediaEmbedObject'); 
           obj.parentNode.removeChild(obj); 
          MYSITE.widget.VideoPanel.superclass.hide.call(this);   
          if(MYSITE.aria) this.body.setAttribute("aria-hidden", "true"); 
          this.keyingElement.focus(); 
         }      
        }); 

/** 
* hide:function closes panel and removes the flash object to stop continual play 
*/ 

YAHOO.register("videoPanel", MYSITE.widget.VideoPanel, { 
      version: "3.0", 
      build: "100" 
     }); 

這裏是獲取和顯示視頻面板的內容代碼:

/** 
* Function to lazy load, then show the video panel with the content of the link passed in inside the panel 
*/ 
var showVideoPanel = function(e, linkEl){ 
    Event.preventDefault(e);  

    if(!YAHOO.env.getVersion("videoPanel")) {   
     var successHandler = function() {    
      videoPanel = new COUNTRY.widget.VideoPanel("videoPanel", " ");    
      showVideoPanel(e, linkEl); 
     }; 

     //this is not likely to go off (404 is not considered an error) 
     var failureHandler = function() { 
      window.location = linkEl.href; 
      return; 
     }; 

     MYSITE.loadComponent("videoPanel", successHandler, failureHandler); 
    } 
    else {    
     MYSITE.util.Ajax.getRemoteContent('GET', linkEl.href, videoPanel.body, { 
      success: function(o){       
       var start, end, el; 
       el = Dom.get(videoPanel.body); 
       start = o.responseText.indexOf('<object'); 
       end = o.responseText.indexOf('</noscript>', start);     
       el.innerHTML = o.responseText.substring(start, end); 

      }, 
      failure: function(o){  
       el = Dom.get(videoPanel.body);   
       el.innerHTML = "The requested content is currently unavailable. Please try again later."; 
      }      
     }); 

     videoPanel.show(linkEl);   
    } 
}; 

最後這裏是我的AJAX調用返回:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="MediaEmbedObject"  height="425" width="525" data="flash/playerVar1.2.swf" type="application/x-shockwave-flash"><param value="flash/playerVar1.2.swf" name="movie"/><param value="lt" name="salign"/><param value="false" name="loop"/><param value="false" name="menu"/><param value="true" name="allowFullScreen"/><param value="true" name="AutoPlay"/><param value="movieSrc=movieSrc=/flash/financial/mediaPlayer/JBVersion2480x360.flv&amp;skinSrc=flash/CustomSkinPlaySeekVolFull.swf&amp;autoPlay=true&#10;&#9;&#9;&#9;&#9;&#9;&#9;" name="FlashVars"/><embed allowFullScreen="true" FlashVars="movieSrc=/flash/financial/mediaPlayer/JBVersion2480x360.flv&amp;skinSrc=flash/CustomSkinPlaySeekVolFull.swf&amp;autoPlay=true&#10;&#9;&#9;&#9;&#9;&#9;&#9;" id="videogalleryObject" height="425" width="525" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" name="videogalleryObject" quality="high" src="flash/playerVar1.2.swf" AutoPlay="true"/></object></noscript><form name="flashForm" action=""><fieldset><input value="flashVid" name="flashDivId" type="hidden"/><input value="525" name="flashWidth" type="hidden"/><input value="425" name="flashHeight" type="hidden"/><input value="flash/playerVar1.2.swf" name="flashUrl" type="hidden"/><input value="movieSrc=/flash/financial/mediaPlayer/JBVersion2480x360.flv&amp;skinSrc=flash/CustomSkinPlaySeekVolFull.swf&amp;autoPlay=true&#10;&#9;&#9;&#9;&#9;&#9;&#9;" name="FlashVars" type="hidden" id="playingFlash"/><input value="Flash" name="flashName" type="hidden"/><input value=" Interns" name="flashAltText" type="hidden"/><input value="always" name="allowScriptAccess" type="hidden"/><input value="true" name="allowFullScreen" type="hidden"/></fieldset></form> 

我最大的問題是,IE瀏覽器的標籤,而不是標籤,由於某種原因(儘管理論上影片仍然應該扮演),它不會在IE拉。我得到了閃存播放器的顯示,有時它甚至會帶來所有的控制,並嘗試加載.flv,但最終總是失敗。任何想法或建議將不勝感激。

+1

「我最大的問題在於IE拉入標籤而不是標籤」 - 您能否更清楚地說出這句話? – shanethehat

回答

0

當我們通過AJAX調用我們發現的時候,我們的服務器正在與媒體做些有趣的事情。之後,我們通過vimeo託管我們的視頻,並使用他們的播放器來決定播放器的哪個版本以及播放視頻的格式,這取決於用戶的瀏覽器。實施起來效率更高,這是我們主要關心的問題。

0

這裏是你的aJax調用的一個片段(flashvars)其中一個參數(它看起來並不正確)。

<param value="movieSrc=movieSrc=/flash/financial/mediaPlayer/JBVersion2480x360.flv&amp;skinSrc=flash/CustomSkinPlaySeekVolFull.swf&amp;autoPlay=true&#10;&#9;&#9;&#9;&#9;&#9;&#9;" name="FlashVars"/>