Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Перехватить click на flash ролике


Автор: dimych83 18.3.2008, 09:23
Добрый день!
Мне надо вставить на главную страницу сайта флэш-ролик swf и повесить на него ссылку, чтобы при нажатии пользователь попадал на другую страницу. В соответствии с исходниками одного из примеров сделал следующее:
Код


<script language=javascript> 
function OpenUrl() { 
  window.navigate("http://www.xxx.ru/yyy/"); 
}; 
</SCRIPT>

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-44553540000" id=howto codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="730" HEIGHT="24"  ALIGN="center">
<PARAM NAME=movie VALUE="/images/howto.swf">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=wmode VALUE=opaque>
<EMBED src="/images/howto.swf" border="0" quality=high WIDTH="730" HEIGHT="24" NAME="/images/howto" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> </EMBED>
</OBJECT>

<script language=javascipt> 
  document.all.howto.onmousedown=new Function("OpenUrl()");
</script>



но это не работает, нет никакой реакции на нажатие. На сайте откуда этот исходник взят - все нормально. Подскажите в чем проблема может быть?!
Может быть обработчик события задается как один из парамтеров объекта?

Автор: IDVsbruck 18.3.2008, 13:28
1. указан id, а ссылка идет по имени. Ссылаться надо так:
Код
document.getElementById("howto").onmousedown = ...

2. определение "чужой" функции происходит так:
Код
document.getElementById("howto").onmousedown = OpenUrl;

или так:
Код
document.getElementById("howto").onmousedown = function() {
      OpenUrl();
};

второй случай обычно используется, если надо вызвать внешнюю функцию с параметрами.
3. идеологически правильнее помещать флешку (object) в div и обрабатывать событие, приходящее в div, а затем, чтобы оно не передавалось по иерархии ниже, "обнулять" его:
Код
event.returnValue = false;

хотя это по желанию
4. а если я нажимаю на флешке и, не отпуская, хочу переместить мышь за пределы флешки? - твой код этого не позволяет, это некорректно к пользователю. Обрабатываться должен не onmousedown, a onclick. На практике событие onmousedown обычно используют для установки флагов для последующей реакции мыши.

Автор: dimych83 18.3.2008, 14:06
Воспользовался 2ым вариантом: 

<script language="JavaScript">
  document.getElementById("howto").onclick = OpenUrl();
</script>

То же самое, IE никаких ошибок не выдает, но и никак на нажатие не реагирует.


Автор: IDVsbruck 18.3.2008, 15:47
Ну ты даешь! Внимательнее надо относиться к коду!!!
OpenUrl() - это результат функции (сначала ее вызов, а потом получение результата),
OpenUrl - ссылка на функцию (простыми словами, чтобы событие переадресовывало свою реакцию на выполнение нужной функции).
Если ты назначаешь событию функцию, то скобки указывать не надо.
Еще для себя поставь alert в своей функции для дебага - приходит ли событие по нажатию на кнопку (прдн, если ты так и делаешь).

Автор: dimych83 19.3.2008, 05:25
Я с JavaScript первый раз сталкиваюсь за последние года 4 smile
Все равно косяк - никакой реакции. Вот весь кусок кода, который к флэшке относится:

Код

<script language="JavaScript"> 
  function OpenUrl() { 
    window.navigate("http://www.mobbiwood.ru/services/givethemood/"); 
  }; 
</SCRIPT>

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-44553540000" id=howto codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="580" HEIGHT="21"  ALIGN="center">
<PARAM NAME=movie VALUE="/images/howto.swf">
<PARAM NAME=quality VALUE=high>
<PARAM NAME=wmode VALUE=opaque>
<EMBED src="/images/howto.swf" border="0" quality=high WIDTH="580" HEIGHT="21" NAME=howto ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"> </EMBED>
</OBJECT>

<script language="JavaScript"> 
  document.getElementById("howto").onclick = OpenUrl; 
</script>



Сама ф-ция OpenUrl нормально отрабатывает - проверял на кнопке.
Еще один момент - я редактирую страницу через NetCat, может это как-то влияет?

Автор: Itsys 19.3.2008, 07:20
А причем здесь
Код

    window.navigate("http://www.mobbiwood.ru/services/givethemood/"); 


насколько я знаю писать нало так
Код

    window.location.href = "http://www.mobbiwood.ru/services/givethemood/"; 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)