2010-02-08 58 views
1

播放列表每次在FF中加載,但只在IE中第一次加載(6-8),之後只能隨機加載。 如果我提醒所引發的錯誤,我會得到「TypeError:playerReady is undefined」。JW播放器播放列表只在IE中隨機加載,每次都能在FF中正常工作

我的代碼看起來不錯,很明顯,因爲FF完美地顯示播放列表。我不知道如何解決這個問題。任何人?

<script type='text/javascript'> 
     var so = new SWFObject('/UI/Flash/player.swf', 'ply', '<%=FlashWidth %>', '<%=FlashHeight %>', '9', '#ffffff'), 
      playlistURL = '<%=PlaylistURL %>', 
      imageURL = '<%=GetBackgroundImageUrl() %>'; 
      so.addParam('allowfullscreen', 'true'); 
      so.addParam('allowscriptaccess', 'always'); 
     if (playlistURL !== '') { 
      so.addVariable('playlistfile', playlistURL); 
      so.addVariable('playlist', 'none'); 
      so.addVariable('enablejs', 'true'); 
     } 
     else { 
      so.addVariable('file', '<%=FlashURL %>'); 
     } 

     if (imageURL.length > 0) { 
     so.addVariable('image', imageURL); 
     } 
     so.write('preview<%=PlayerID %>'); 
    </script> 
+0

好像JW Player代碼不是100%.. – patad 2010-05-03 09:59:04

回答

0

不知道如何解決它,但這裏是實際工作的最終代碼:

HTML頁面:

<script type='text/javascript'> 
     var so = new SWFObject('/UI/Flash/player.swf', 'ply', '700', '345', '9', '#ffffff'), 
      playlistUrl = 'XML-PLaylist', 
      imageURL = '/ImageVault/Images/conversionFormat_2/id_1577/scope_0/ImageVaultHandler.aspx'; 
      so.addParam('allowfullscreen', 'true'); 
      so.addParam('allowscriptaccess', 'always'); 
      so.addParam('wmode', 'opaque'); 
     if (playlistUrl !== '') { 
      so.addVariable('playlistfile', playlistUrl); 
      so.addVariable('playlist', 'none'); 
      so.addVariable('controlbar', 'bottom'); 
      so.addVariable('backcolor', '0xDDE5FF'); 
      so.addVariable('frontcolor', '0x142864'); 
      so.addVariable('screencolor', '0xffffff'); 
      so.addVariable('enablejs', 'true'); 
      so.addVariable('overstretch', 'true'); 
     } 
     else { 
      so.addVariable('file', ''); 
     } 

     if (imageURL.length > 0) { 
     so.addVariable('image', imageURL); 
     } 
     so.write('preview'); 
    </script> 

這裏的JavaScript:

try { 

      var playlistReady = playerReady; 
     } cat 

ch (err) { 
     //alert('1' + err); 
    } 

    playerReady = function(obj) { 
     setTimeout(function() { checkPlaylistLoaded(obj) }, 1); 
     try { 
      playlistReady(obj); 
     } catch (err) { 
      //alert(err); 
     } 
    } 

    function itemHandler(obj) { 
     var item = obj['index']; 
     var playlist = $("#" + obj['id']).next(); 
     var currentItem = 0; 
     playlist.children().each(function() { 
      if (currentItem == item) { 
       $(this).addClass("playing"); 
      } else { 
       $(this).removeClass("playing"); 
      } 
      currentItem++; 
     }); 
    } 


    function checkPlaylistLoaded(obj) { 
     //debugger; 
     var player = document.getElementById(obj['id']), 
      jsPlaylist = player.getPlaylist(); 
     if (jsPlaylist.length > 0) { 
      var playlist = createPlaylist(obj); 
      populatePlaylist(player, jsPlaylist, playlist); 
      player.addControllerListener("PLAYLIST", "playlistHandler"); 
      player.addControllerListener("ITEM", "itemHandler"); 
      player.addControllerListener("STOP", "showPlaylist"); 
      player.addModelListener("STATE", "stateListener"); 
     } else { 
      setTimeout(function() { checkPlaylistLoaded(obj) }, 150); 
     } 
    } 

    function stateListener(obj) { 
     if (obj.newstate === 'PLAYING') { 
      hidePlaylist(); 
     } 
     if (obj.newstate === 'PAUSED') { 
      showPlaylist(); 
     } 
    } 

    function createPlaylist(obj) { 
     var playerDiv = $("#" + obj['id']); 
     playerDiv.after("<div class='jw_playlist_playlist'></div>"); 
     return playerDiv.next(); 
    } 

    function hidePlaylist() { 
     $('.jw_playlist_playlist').animate({ left: "-320px" }, 1000); 
    } 

    function showPlaylist() { 
     $('.jw_playlist_playlist').animate({ left: "-10px" }, 1000); 
    } 

    function playlistHandler(obj) { 
     var player = document.getElementById(obj['id']), 
      jsPlaylist = player.getPlaylist(), 
      playerDiv = $("#" + obj['id']), 
      playlist = playerDiv.next(); 
     populatePlaylist(player, jsPlaylist, playlist); 
    } 

    function populatePlaylist(player, jsPlaylist, playlist) { 
     playlist.empty(); 
     for (var i = 0; i < jsPlaylist.length; i++) { 
      var jsItem = jsPlaylist[i]; 
      var alternate = "even"; 
      if (i % 2) { 
       alternate = "odd"; 
      } 
      playlist.append("<div id='" + getItemId(jsItem) + "' class='jw_playlist_item " + alternate + "'>" + dump(jsItem) + "</div>"); 
     } 
     var playlistItem = 0; 
     playlist.children().each(function() { 
      var currentItem = playlistItem; 
      $(this).click(function() { 
       player.sendEvent("ITEM", currentItem); 
      }); 
      playlistItem++; 
     }); 
    } 

    function getItemId(arr) { 
     var output = '${link}', 
      variables = getVars(output), 
      j; 

     for (j = 0; j < variables.length; j++) { 
      var variable = variables[j], 
       varName = variable.replace('${', '').replace('}', ''), 
       value = arr[varName]; 
      if (!value) { 
       value = ''; 
      } 
      output = output.replace(variable, value); 
     } 
     return output; 
    } 

    function dump(arr) { 
     var output = "<div class='jw_playlist_title'>${title}</div><div class='jw_playlist_description'>${description}</div>", 
      variables = getVars(output), 
      j; 
     for (j = 0; j < variables.length; j++) { 
      var variable = variables[j], 
       varName = variable.replace('${', '').replace('}', ''), 
       value = arr[varName]; 
      if (!value) { 
       value = ''; 
      } 
      output = output.replace(variable, value); 
     } 
     return output; 
    } 

    function dumpText(arr) { 
     var dumped_text = ""; 
     if (typeof (arr) == 'object') { 
      for (var item in arr) { 
       var value = arr[item]; 
       if (typeof (value) == 'object') { 
        dumped_text += "<div class='" + item + "'>"; 
        dumped_text += dump(value); 
        dumped_text += "</div>"; 
       } else { 
        dumped_text += "<div class='" + item + "'>" + value + "</div>"; 
       } 
      } 
     } else { 
      dumped_text += arr + " (" + typeof (arr) + ")"; 
     } 
     return dumped_text; 
    } 

    function getVars(str) { 
     return str.match(/\$\{(.*?)\}/g); 
    } 
0

playerReady函數一旦完成它的設置過程就被播放器調用。你碰巧定義了那個函數,然後將它設置爲undefined?這可能會導致錯誤。

此外,您使用的是哪個版本的玩家?

so.addVariable('enablejs', 'true'); 

我不相信自從3.X播放器以來一直是flashvar,不再支持。

最佳,

扎克

開發,長尾視頻

+0

嗨,Zach!感謝您的回覆。不知道發生了什麼,但不知何故它開始工作。 查看此處的解決方案: http://www.attendo.com/sv/se/ – patad 2010-05-26 14:39:37

相關問題