Javascript / Jquery Проблема с - playStateChange, объект Mediaplayer IE9 ... пытается заставить Jquery bind () работать с этим событием ... Читать дальше - PullRequest
4 голосов
/ 24 июля 2011

Хорошо, теперь проблема здесь ...

Сначала я пытался исключить, использовать ли flash player, html5 player или mediaplayer для этого клиента ..... HTML5 кажетсяпредлагая реализацию, которая не содержит плагинов, поэтому я решил отказаться от Flash .... и рассматривал маршрут HTML5 ... все хорошо ... сделал хороший плеер, который также был кросс-браузерным и хорошо заботился о кодеках, но упс... понял, что html5 не смог запустить ASX ... поэтому он вернулся к старому маршруту Windows MediaPlayer ... У меня не было никакого реального выбора ....

Я поставил функцию javascript, котораяпросто оповещение и должно срабатывать всякий раз, когда медиаплеер меняет состояние (скажем, из воспроизведения вы приостанавливаете его ....)

function WMP_status()
{
   alert("state Changed");
}

Я встроил объект медиаплеера на html-страницу и создал псевдоним в javascript дляполучить доступ к этому объекту программно и получить контроль над ним через javascript ...... Примерно так ...

var WMP=document.getElementById("mediaplayer");

Затем настал черед захвата состояния медиаплеера ... так что я требуюкрасный - какая-то форма события ... поэтому я зарегистрировал событие примерно так .... и работал нормально ...

WMP.attachEvent("playStateChange", WMP_status);
// Note ...  WMP.detachEvent("playStateChange", WMP_status); ... doesn't always detach events...

Я понял, что в IE проблема с отключением событий все еще сохраняется (см. рисунок)но, к моему удивлению, я понял, что начиная с ie9 .... addEventListener должен был быть также включен как часть поддержки javascript, поэтому я попробовал следующую строку, которая, очевидно, должна обозначать вышеприведенное, но не радость .....

WMP.addEventListener("playStateChange", WMP_status , false); 

Возможно, я подумал, что addEventListener все еще не реализован должным образом в IE9, поэтому я попытался использовать метод JQuery bind () примерно так ... но все равно не радость ....

$(WMP).bind("playStateChange", WMP_status); 

Я пробовал также эти 2 варианта

(а) до сих пор нет радости ....

$(WMP).bind("playStateChange", "WMP_status"); 

(б) до сих пор нет радости .....

$(WMP).bind("playStateChange", function(){WMP_status()}); 

Я попробовал это, чтобы исключить всевозможные возможности ... на сайте jquery не было информации, могу ли я ввести имя функции или нет ... поэтому я попытался также ввести анонимное имя ....

В любом случае ... Я бы действительно предпочел использовать механизм Jquery длявентиляционная обработка, особенно из-за того, что он гораздо более кроссбраузерный ... может кто-нибудь помочь мне в этом?Я также пошел по этому пути динамического присоединения событий, потому что я буду добавлять / удалять элементы через jquery ... и remove () также будет удобно отсоединять события ...

Большое спасибо Al

1 Ответ

1 голос
/ 09 августа 2012

В соответствии с этим site привязка к wmp-плагину с библиотекой javascript, такой как jQuery, не будет работать из-за отсутствующего префикса on (будет читать «onPlayStateChange»), который обычно является префиксом всех событий-names.

Библиотеки, такие как jQuery, учитывают это правило ... и фактически регистрируются на несуществующем событии.

Если это правда, тогда вам нужно остаться с attachEvent

...