2009-09-18 23 views
35

मेरे पास एक div के अंदर एक एम्बेड फ्लैश मूवी है, मैंने मुख्य जावा में एक जावास्क्रिप्ट ऑनक्लिक ईवेंट हैंडलर डाला है, लेकिन क्लिक को पकड़ नहीं रहा है, क्या गलत है?फ्लैश ऑब्जेक्ट पर जावास्क्रिप्ट ऑनक्लिक घटना

कोड:

<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

सभी एसएफएफ के बारे में सोचना सर्वोत्तम है क्योंकि अनंतता का ज़ेड-ऑर्डर है। फ्लैश शीर्ष पर है और इसे रोकने के लिए बहुत कम किया जा सकता है। दूसरी तरफ, यदि आपके पास एसडब्ल्यूएफ के कोड तक पहुंच है, या यदि आप अपने वर्तमान एसएफएफ को लोड करने के लिए एक और एसएफएफ का उपयोग कर सकते हैं, तो आप पृष्ठ के जावास्क्रिप्ट को संबोधित करने के लिए कुछ अलग-अलग फ्लैश कमांड का उपयोग करने में सक्षम होंगे । (बाहरी इंटरफेस आपकी सबसे अच्छी शर्त है)।

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

ऑनक्लिक के बजाय ऑनमोसउन का उपयोग करने का एक और वैकल्पिक समाधान नीचे डार्विन द्वारा प्रदान किया जाता है।

+0

पर क्लिक करते हैं तो मैं (रिलीज़) {getURL ("जावास्क्रिप्ट: हाइलाइटफॉर्म()") पर फ्लैश में आज़माएं; } और ठीक काम !!! लेकिन आपका समाधान भी वैध है, इसलिए धन्यवाद! – Pedro

2

फ़्लैश लगभग निश्चित रूप से अपनी मूल करने के लिए क्लिक करें घटना का प्रचार नहीं करता है। जब तक आप फ्लैश नहीं लिखते, तब तक आप कुछ भी नहीं कर सकते, मुझे लगता है।

2

फ़्लैश ऑब्जेक्ट हमेशा क्लिक को पकड़ लेगा और स्वचालित रूप से इसे पास नहीं करेगा। आपको उस कार्यक्षमता को बनाना होगा - फ्लैश पर क्लिक करें और जेएस-फ़ंक्शन को कॉल करें।

आप क्या करने की कोशिश कर रहे हैं?

+0

मैं किसी अन्य के सीएसएस वर्ग बदलने के लिए कोशिश कर रहा हूँ पेज ऑब्जेक्ट जब हम swf – Pedro

1

ऑब्जेक्ट टैग पर ईवेंट चालू करें। (obejct टैग माउस घटनाओं का समर्थन करता है)। फिर डोम के माध्यम से पैरेंट div को पकड़ो।

86

मैं http://progproblems.blogspot.com/2009/08/javascript-onclick-for-flash-embeded.html

  1. transparent करने के लिए wmode सेट परम पर इस पाया। यह फ़्लैश को ऑब्जेक्ट को जावास्क्रिप्ट onclick प्राप्त करने की अनुमति देता है।
  2. onmousedownonclick का उपयोग करें। 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 पर क्लिक करें घटना रख सकते हैं ताकि फ्लैश होगा कभी माउस पकड़ो नहीं।

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

अच्छा !!!

1

मुझे उस समस्या का सामना करना पड़ा जब मैंने स्वचालित गतिशील बैनर बनाने की कोशिश की। यदि एसडब्ल्यूएफ को 'अपारदर्शी' मोड में सेट किया गया था, तो मेरे पास कोई क्लिक स्वीकार्य नहीं था - और मुझे अपारदर्शी का उपयोग करना पड़ा क्योंकि कुछ बैनर वेबसाइट रंगों के साथ गड़बड़ कर रहे थे।मुझे मिला समाधान, एसडब्ल्यूएफ को 'पारदर्शी' मोड पर सेट करना है, <div> z-index: 10, और इसके नीचे एक नया <div> एसडब्ल्यूएफ फ़ाइल के समान आयामों के ऊपर रखें, जो अपारदर्शी से भरा हुआ है एसडब्ल्यूएफ दोनों < > टैग में divs। वह काम किया।

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> 
संबंधित मुद्दे