Order Now AdSolution Sign Up | Login » Bits on the Run Sign Up | Login »

Forums

/

Hide / Show Player issue

3 replies [Last post]

Hello,

I am occasionally getting the following error
TypeError: player.getConfig is not a function message=player.getConfig is not a function

(I seem to get this when part of the player is no longer or partly visible on the screen.

I am wondering where I went wrong?

this is the code I am using below

//this is the html
<div style="position: absolute;width: 320px;height: 240px;left: 10px;top: 10px;z-index: 2;">
<a id="videoPlayer" class="playerContainer" href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash">Get the Flash Plugin to see the video.</a>
</div>

//This is the js code
var player;
var currentItem = -1;
var preBuffer = false;
var playerIndex = 0;
var timerID = 0;

function playerReady(obj) {
player = document[obj.id];
player.addControllerListener('ITEM', 'itemMonitor');
player.addModelListener('LOADED', 'loadedMonitor');

//...to play a specific item using getQueryParamValue('item')
if((playerIndex != null) && (playerIndex < player.getPlaylist().length)) {
player.sendEvent('ITEM', (playerIndex - 1));
playerIndex = null;
}
};

function itemMonitor(obj) {
if(currentItem != obj.index) {
//...global for use in other functions
currentItem = obj.index;
preBuffer = false;
}
};

function loadedMonitor(obj) {
if(((obj.loaded / obj.total) > .5) && (!preBuffer)) {
var playlist = player.getPlaylist();
var url = playlist[currentItem + 1]['file'].replace("../","");
//added replace to remove the ../ from the array (needed to keep videos on the root)
preBuffer = true;
sendRequest(url);
}
};

function sendRequest(url) {
$.get(url, function(){
preBuffer = false;
});
}

function createPlayer() {
var flashvars = {
file:"",
image:"",
autostart:"true",
bufferlength:"1",
icons:"false",
controlbar:"none",
playlist:"none",
playlistsize:"0",
shuffle:"false",
stretching:"exactfit",
repeat:"list"
}

var params = {
allowfullscreen:"false",
allowscriptaccess:"always",
wmode:"opaque"
}

var attributes = {
id:"player1",
name:"player1"
}

swfobject.embedSWF('flash/player.swf', 'videoPlayer', '320', '240', '9.0.124', false, flashvars, params, attributes);
return true;
}

$(window).load(function() {
var winWidth = $(window).width();
var winHeight = $(window).height();
var leftSide;
var rightSide;
createPlayer();

$("#gotdmap").click(function(e){
$("#playerContainer").show(function(){
timerID = 0;
setTimeout("player.sendEvent('LOAD',loadMovie());timerID = setInterval('moniterMovie();',100);", 800);
});
});

});

function moniterMovie(){
try{
if($("#playerContainer").length == 1){
if(player.getConfig().state == "COMPLETED"){
clearInterval(timerID);
$("#playerContainer").hide();
}
}
} catch(err) {
clearInterval(timerID);
console.log(err);
}
}

function loadMovie(){
var videoList = new Array();

videoList[0] = {
file:"../videos/handc.flv",
image:"",
type:"video"
}

return videoList;
}

//CSS
#playerContainer {
position: absolute;
z-index: 2;
display: none;
width: 340px;
height: 321px;
}

 
My guess is that you are trying to add the Listeners before the player is really ready and it's occasionally failing.

      function playerReady(obj)
      {
        player = document.getElementById(obj.id);
        addListeners();
      };

      function addListeners()
      {
        playlist = player.getPlaylist();

        if((playlist !== null) && (playlist.length > 0))
        {
          player.addControllerListener('ITEM', 'itemMonitor');
          player.addModelListener('LOADED', 'loadedMonitor');

          //...to play a specific item using getQueryParamValue('item')
          if((playerIndex != null) && (playerIndex < player.getPlaylist().length))
          {
            player.sendEvent('ITEM', (playerIndex - 1));
            playerIndex = null;
          }
          else
          {
            itemMonitor({index:0});
          }
        }
        else
        {
          setTimeout("addListeners()", 100);
        }
      };

Allright so I added that and I added a bunch of try catch's to see if I could see where the issues where I am still getting player.getPlaylist() errors but now IE doesn't close the window on complete

updated code below

var player    =  null;
var playlist  =  null;
var currentItem = -1;
var preBuffer = false;
var playerIndex = 0;
var timerID = 0;

function playerReady(obj) {
try{
player =  document.getElementById(obj.id);
addListeners();
} catch(e) {
console.log("playerRead("+obj+"): "+e);
setTimeout("playerReady(obj);", 100);
}
};

function addListeners() {
try{
playlist = player.getPlaylist();
console.log(playlist);
if((playlist !== null) && (playlist.length > 0)) {
player.addControllerListener('ITEM', 'itemMonitor');
//player.addModelListener('LOADED', 'loadedMonitor');

player.addModelListener('STATE', 'stateMonitor');
} else {
setTimeout("addListeners();", 100);
}
} catch(e) {
console.log("addListeners(): "+e);
setTimeout("addListeners();", 100);
}
};

function itemMonitor(obj) {
try{
if(currentItem != obj.index) {
//...global for use in other functions
currentItem = obj.index;
preBuffer   = false;
}
} catch(e) {
console.log("itemMonitor("+obj+"): "+e);
setTimeout("itemMonitor(obj);", 100);
}
};

function loadedMonitor(obj) {
try{
if(((obj.loaded / obj.total) > .5) && (!preBuffer)) {
playlist = player.getPlaylist();
var url = playlist[currentItem + 1]['file'].replace("../","");
//added replace to remove the ../ from the array (needed to keep videos on the root)
preBuffer = true;
sendRequest(url);
}
} catch(e) {
console.log("loadedMonitor("+obj+"): "+e);
setTimeout("loadedMonitor(obj);", 100);
}
};

function sendRequest(url) {
try{
$.get(url, function(){
preBuffer = false;
});
} catch(e) {
console.log("sendRequest("+url+"): "+e);
setTimeout("sendRequest(url);", 100);
}
};

function stateMonitor(obj) {
try{
console.log(obj.newstate);

if(obj.newstate == 'COMPLETED') {
alert('done');
//if($("#playerContainer").length == 1){
$("#playerContainer").hide();
//}
}
} catch(e) {
console.log("stateMonitor("+obj+"): "+e);
setTimeout("stateMonitor(obj);", 100);
}
};

function loadMovie(){
try{
var videoList = new Array();

videoList[0] = {
file:"../videos/handc.flv",
image:"",
type:"video"
}

return videoList;
} catch(e) {
console.log("loadMovie(): "+e);
setTimeout("loadMovie();", 100);
}
};

function createPlayer() {
try{
var flashvars = {
file:"",
image:"",
autostart:"true",
bufferlength:"1",
icons:"false",
controlbar:"none",
playlist:"none",
playlistsize:"0",
shuffle:"false",
stretching:"exactfit",
repeat:"list"
}

var params = {
allowfullscreen:"false",
allowscriptaccess:"always",
wmode:"opaque"
}

//set the id and name of the flash object
var attributes = {
id:"flashObjPlayer",
name:"flashObjPlayer"
}

swfobject.embedSWF('flash/player.swf', 'videoPlayer', '320', '240', '9.0.124', false, flashvars, params, attributes);
return true;
} catch(e) {
console.log("createPlayer(): "+e);
setTimeout("createPlayer();", 100);
}
};

$(window).load(function() {
var winWidth = $(window).width();
var winHeight = $(window).height();
var leftSide;
var rightSide;
createPlayer();

$("#gotdmap").click(function(e){
$("#playerContainerArrow").removeClass();

var mouseX = e.pageX;
var mouseY = e.pageY;

var playerContainerWidth = $("#playerContainer").width();
var playerContainerHeight = $("#playerContainer").height();

mouseX -= 115;
mouseY -= playerContainerHeight;

if(mouseY <= 0){
leftSide = "arrowBottomRight";
rightSide = "arrowBottomLeft";
$("#playerContainerArrow").addClass("arrowBottomRight");
$("#playerContainerArrowDiv").css({top:"-68px"});
mouseY += playerContainerHeight+60;
} else {
leftSide = "arrowTopRight";
rightSide = "arrowTopLeft";
$("#playerContainerArrow").addClass("arrowTopRight");
$("#playerContainerArrowDiv").css({top:"235px"});
}

if((mouseX+playerContainerWidth) >= winWidth){
$("#playerContainerArrowDiv").css({left:mouseX-winWidth+playerContainerWidth+30});
mouseX = winWidth-playerContainerWidth;
$("#playerContainerArrow").removeClass();
$("#playerContainerArrow").addClass(rightSide);
} else if(mouseX <= 0) {
$("#playerContainerArrow").removeClass();
$("#playerContainerArrow").addClass(leftSide);
$("#playerContainerArrowDiv").css({left:mouseX+105});
mouseX = 0;
} else {
$("#playerContainerArrowDiv").css({left:"102px"});
}

$("#playerContainer").css({
left: mouseX,
top: mouseY});

$("#playerContainer").show(function(){
//timerID = 0;
loadPlayer();
});
});
});

function loadPlayer(){
try{
player.sendEvent('ITEM', 0);//resets to the beginning
//player.sendEvent('LOAD',videoList);//reloads the playlist
player.sendEvent('LOAD',loadMovie());
//setTimeout("player.sendEvent('LOAD',loadMovie());", 800);
} catch(e) {
setTimeout("loadPlayer();", 100);
}
};

Why would IE close the window?