Несколько месяцев назад для проекта на работе я разработал видеоплеер, используя flash, внешний интерфейс и swfobject.js. Я использовал внешний интерфейс для облегчения связи между JavaScript и ActionScript. Это прекрасно работает. В настоящее время я работаю над расширением этого, которое требует от меня экстраполировать логику из того, что я уже написал. Я использую один и тот же SWF-файл в обоих приложениях, но в расширении я не могу заставить объект Flash распознавать мои вызовы. Так как я использую тот же объект SWF, я знаю, что моя проблема в JavaScript, я просто не знаю, где. Я использую библиотеку JQuery. Без лишних слов вот мой код.
В нижней части моего файла JS у меня есть следующее:
$(function(){
//the video player shouldn't be built until the user presses the div with 'video-btn' class
$('.video-btn').click(function(){
var videoplayer = new VideoPlayer();
videoplayer.addVideoPlayer();
//external interface function
videoplayer.player.loadVideo();
});
});
Вот определение для VideoPlayer.addVideoPlayer()
и соответствующие вспомогательные функции:
//inside of VideoPlayer object definition
this.addVideoPlayer = function(){
var that = this;
$('body').append('<div id="no-flash"></div>');
//uses swfobject.js to replace the div i just appended with the flash object
//This works fine. the flash object replaces the div as intended
that.embedFlashObject();
//that.player is (supposed to be) a reference to flash object
that.player = that.getFlashObject();
};
this.embedFlashObject = function(){
var that = this;
//set up all the variables to pass to swfobject.embedSWF
//this method removes my div and replaces it with an object element that contains the swf file
//the object tag gets an id which is specified. Let's assume it's 'vp'
swfobject.embedSWF(swfFile, 'no-flash', width, hieght, '9.0.0', ... );
};
this.getFlashObject = function(){
var that = this;
//this method returns the flash object to make external interface calls on
//this the method prescribed by swfobject api
var videoObj = swfobject.getObjectById('vp');
if(typeOf videoObj == 'undefined')
{
//check if useragent string is IE
var isIE = navigator.userAgent.match(/MSIE/i);
videoObj = isIE ? window['vp'] : document['vp'];
}
return videoObj;
};
В моем блоке $(function(){..});
при выполнении команды 'videoplayer.player.loadMedia();
' я получаю сообщение об ошибке
.loadMedia не является функцией.
В предыдущей версии этого проекта (в которой я использую тот же SWF-файл) я не получаю эту ошибку.
Я не думаю, что пропускаю какие-либо серьезные логические ошибки, и я знаю, что трудно сказать однозначно «это ваша проблема ...», глядя на сокращенный и вычеркнутый код. Вместо определенного ответа я приму предложения относительно того, как решить эту проблему. Я играл aorund в консоли браузера и обнаружил, что атрибут «player» моего объекта VideoPlayer имеет значение null. Когда я выполнял тот же консольный запрос к рабочей версии этого проекта, он выплевывает тег объекта. Я не могу напрямую установить тег объекта, потому что он порвет с соглашениями, использованными в предыдущей версии, которые мне нужно поддерживать.
HELP !!!!!!!!!!!!!!!