2009-09-18 6 views
35

У меня есть один встроенный флеш-фильм внутри одного div, я помещаю один обработчик события onclick javascript в главный div, но не поймал клик, что не так?javascript onclick event over flash object

Код:

<div id="top-box-player" onclick="alert('Hi Bananas!');"> 
    <object width="400" height="300"> 
     <param name="movie" value="general.swf"> 
     <embed src="./swf/general.swf" width="400" height="300"> 
     </embed> 
    </object> 
    </div> 
+0

См http://stackoverflow.com/questions/33459/how-do-you-use-a-flash-object-as-a-link – voyager

ответ

21

Лучше всего думать обо всех swf как о z-порядке бесконечности. Flash находится сверху, и очень мало можно сделать, чтобы остановить это. С другой стороны, если у вас есть доступ к самому коду самого SWF или если вы можете использовать другой swf для загрузки текущего swf, вы сможете использовать несколько различных команд Flash для обращения к JavaScript на странице , (ExternalInterface - ваш лучший выбор).

//This is what your AS code should look like: 
import flash.external.ExternalInterface; 
import flash.events.MouseEvent; 

root.addEventListener(MouseEvent.CLICK, useExternal, true); 

function useExternal(event:MouseEvent):void 
{ 
    //swfClickFunction is defined in JavaScript 
    ExternalInterface.call("swfClickFunction"); 
} 

Другое альтернативное решение, использующее onmousedown вместо onclick, представлено Дарвином ниже.

+0

Я пытаюсь запустить flash с на (выпуск) {getURL ("javascript: highlightform()"); } и работать нормально !!! Но ваше решение действительно и так, спасибо! – Pedro

2

Вспышка почти наверняка не распространяет событие щелчка на его родителя. Ничего не могу сделать, если вы не написали флешку, я полагаю.

2

Flash-объект всегда будет ловить щелчок, а не автоматически передавать его. вам придется построить эту функциональность - поймать onclick во flash и вызвать JS-функцию.

Что вы пытаетесь достичь?

+0

Я пытаюсь изменить класс CSS другого объект страницы, когда мы нажимаем на swf – Pedro

1

сделать onclick событие на теге объекта. (тег obejct поддерживает события мыши). затем захватите родительский div через DOM.

86

Я нашел это в http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Установите Парам wmode в transparent. Это позволяет объекту, содержащему флэш, получать javascript onclick.
  2. Использование onmousedown insted of onclick. Несмотря на использование wmodetransparent, некоторые браузеры все еще не назовут onclick, но они действительно звонят onmousedown.

код выглядит следующим образом:

<div onmousedown="clickBanner(1)"> 
<object> 
<param name="movie" value="3.swf"> 
<param name="wmode" value="transparent" /> 
<embed wmode=transparent allowfullscreen="true" allowscriptaccess="always" src="3.swf"></embed> 
</object> 
</div> 

Он работает для моих потребностей =)

+0

http://stackoverflow.com/questions/6273966/detect-flash-object-click-in-javascript/6276394#6276394 –

+0

Отличный ответ Дарвин! – Eric

+1

Спасибо! В качестве продолжения, одна разница в использовании mousedown заключается в том, что он будет вызван щелчком правой кнопки мыши и щелчком левой кнопкой мыши, делая щелчки правой кнопкой мыши в контекстном меню вспышки, а также то, что сделает ваш прослушиватель кликов. Таким образом, этот ответ может помочь тем, кто хочет заблокировать правые клики. http://stackoverflow.com/questions/9521519/how-can-i-detect-a-rightmouse-button-event-on-mousedown – heff

2

Попробуйте это простое решение закрыть вспышку ДИВ и поставить событие щелчка на верхнем DIV так флэш будет никогда не хватайте мышь.

<div style="position:absolute;top:209px;left:80px;z-index:500;" id="helpvideos"> 
<div style="float:left"> 
<fb:swf 
    swfbgcolor="FFFFFF" 
    swfsrc='<?php echo SITE_URL;?>swf/3_sidebar.swf' 
    width='600' height='670' 
    wmode="transparent" 
    /> 
</div> 
<div style="width:600px;height:670px;position:absolute;float:left;z-index:6000;" onclick="document.getElementById('helpvideos').setStyle('display','none');">&nbsp;</div> 
</div> 
1
<param name="wmode" value="transparent" /> 

Это было решение для меня. Ну, я реализовал его над AC_RunActiveContent.js по параметрам:

'wmode', 'transparent', 

Nice !!!

1

У меня была эта проблема, когда я пытался создавать автоматические баннеры с динамическим размещением. Если SWF был установлен в режим «opaquecolor», тогда у меня не было доступных кликов - и мне пришлось использовать opaquecolor, потому что некоторые баннеры были испорчены цветами веб-сайтов.Решение, которое я нашел, заключается в том, чтобы установить SWF в «прозрачный» режим на <div> из z-index: 10 и разместить под ним новый <div> тех же размеров SWF-файла, заполненный opaquecolor of SWF. Оба делятся на тег <a>. Это сработало.

Example: 
    <a href="www.mysite.com"> 
    <div id="SWF_file_container" style="width:100px; height:40px; z-index:10;"> 
    <object> .... </object> (adding SWF in TRANSPARENT MODE) 
    </div> 
    <div id="opaquecolor_of_swf" style="width:100px; height:40px; z-index:2; background-color:#ff0000;"></div> 
    </a>