2009-09-18 39 views
35

Tôi có một bộ phim flash nhúng bên trong một div, tôi đặt một trình xử lý sự kiện onclick javascript vào div chính, nhưng không bắt được nhấp chuột, điều gì là sai?sự kiện onclick javascript trên đối tượng flash

Code:

<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

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

Trả lời

21

Tốt nhất là nên nghĩ đến tất cả swf khi có thứ tự z vô cùng. Flash ở trên đầu và có rất ít điều có thể được thực hiện để ngăn chặn điều đó. Mặt khác, nếu bạn có quyền truy cập vào mã của SWF hoặc nếu bạn có thể sử dụng một swf khác để tải swf hiện tại của mình, bạn sẽ có thể sử dụng một vài lệnh Flash khác nhau để giải quyết JavaScript của trang . (ExternalInterface là cược tốt nhất của bạn).

//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"); 
} 

Một giải pháp thay thế khác bằng cách sử dụng onmousedown thay vì onclick được cung cấp bởi Darwin bên dưới.

+0

Tôi thử flash với trên (release) {getURL ("javascript: highlightform()"); } và làm việc tốt !!! Nhưng giải pháp của bạn cũng hợp lệ, vì vậy cảm ơn! – Pedro

2

Đèn flash gần như chắc chắn không tuyên truyền các sự kiện click vào mẹ của nó. Không có gì bạn có thể làm trừ khi bạn viết flash, tôi cho là vậy.

2

đối tượng flash sẽ luôn bắt được nhấp chuột và không tự động truyền nó cùng. bạn sẽ phải xây dựng chức năng đó - bắt onclick trong flash và gọi hàm JS.

bạn đang cố gắng làm gì?

+0

Tôi đang cố gắng để thay đổi lớp css của người khác đối tượng trang khi chúng ta nhấp vào swf – Pedro

1

thực hiện sự kiện onclick trên thẻ đối tượng. (thẻ obejct hỗ trợ các sự kiện chuột). sau đó lấy div cha mẹ thông qua DOM.

86

Tôi thấy điều này ở http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. Đặt param wmode-transparent. Điều này cho phép đối tượng chứa flash để nhận được javascript onclick.
  2. Sử dụng onmousedown insted của onclick. Mặc dù sử dụng wmodetransparent, một số trình duyệt vẫn không gọi số onclick, nhưng họ gọi số onmousedown.

Mã này trông như thế này:

<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> 

Nó làm việc cho nhu cầu của tôi =)

+0

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

+0

Câu trả lời hay nhất Darwin! – Eric

+1

Cảm ơn! Theo dõi, một sự khác biệt trong việc sử dụng mousedown là nó sẽ được kích hoạt bằng cách nhấp chuột phải và nhấp chuột trái, làm cho nhấp chuột phải bật lên trình đơn ngữ cảnh flash và bất kể trình nghe nhấp chuột của bạn sẽ làm gì. Vì vậy, câu trả lời này có thể giúp những người tìm cách chặn nhấp chuột phải. http://stackoverflow.com/questions/9521519/how-can-i-detect-a-rightmouse-button-event-on-mousedown – heff

2

Hãy thử giải pháp dễ dàng này che đèn flash với div và đưa sự kiện click vào div đầu để đèn flash sẽ không bao giờ lấy con chuột.

<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" /> 

Đây là giải pháp cho tôi. Vâng, tôi đã triển khai nó trên AC_RunActiveContent.js tại tham số:

'wmode', 'transparent', 

Nice !!!

1

Tôi gặp sự cố đó khi cố gắng tạo biểu ngữ tự động đặt động. Nếu SWF đã được chuyển sang chế độ 'opaquecolor', thì tôi không có nhấp chuột chấp nhận được - và tôi phải sử dụng opaquecolor vì một số biểu ngữ đã bị rối tung lên với màu của trang web.Giải pháp tôi tìm thấy, là đặt chế độ SWF thành 'trong suốt', tại một số <div> của z-index: 10 và đặt bên dưới nó mới <div> cùng kích thước của tệp SWF, đầy opaquecolor SWF. Cả hai div thành một thẻ <a>. Điều đó hiệu quả.

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> 
Các vấn đề liên quan