2011-10-27 11 views
5

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

यहाँ मैं क्या है:

<head> 
<title>UP HERE WE ESCAPE THE RAT RACE</title> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script> 
<script type="text/javascript"> 
    swfobject.embedSWF("UpHere.swf", "myContent", "700", "300", "9.0.0"); 

    function setFocusOnFlash() { 
    var fl = document.getElementById("myContent"); 
     if (fl) { fl.focus(); } 
    } 
</script> 
    </head> 
    <body onload="setFocusOnFlash()"> 
    <div style="margin:0 auto; text-align:center; width:700px;"> 
    <div id="myContent" style="margin:0 auto; text-align:center; width:700px;"> 
     <p>Alternative content</p> 
    </div> 
    </div> 
     </body> 

आप इसे यहाँ रहते देख सकते हैं, http://joon.be/exclusivepreview/

क्या इसके साथ गलत क्या है? मेरे पास swfObject का बहुत गहरा ज्ञान नहीं है ...

उत्तर

6

मुझे एक ऐसा तरीका मिला है जो फ़ायरफ़ॉक्स 16, क्रोम 23 और आईई 8 पर मेरे लिए काम करता है (ये वह जगह है जहां मैंने इसे अभी तक परीक्षण किया है)। बेशक, यह हैक्स का एक समूह है, इसलिए कौन जानता है कि यह हमेशा के लिए काम करेगा ... लेकिन यह निश्चित रूप से चीजों को और खराब नहीं करता है।

function setFocusOnFlash() {  
    var flash = document.getElementById("theIdOfTheObjectElement"); 
    flash.tabIndex = 1234; // This was needed on Chrome 23 
    flash.focus(); 
    // Attention: FireFox needs wmode "opaque"! 
} 

फ़ायरफ़ॉक्स पर केवल, object तत्व के तहत <param name="wmode" value="opaque"> भी जरूरत थी, वरना focus() कोई प्रभाव नहीं पड़ा। (मैं स्टीफन Belanger के jquery.flash जहां wmode निर्दिष्ट कर सकते हैं इस्तेमाल किया है,; मुझे लगता है यह SWFObject साथ भी हो सकता है।)

लेकिन जटिल बात यह है कि आप setFocusOnFlash बहुत जल्दी फोन नहीं करना चाहिए। क्रोम और आईई के लिए, setTimeout(setFocusOnFlash, 1) सीधे जावास्क्रिप्ट के बाद जो ऑब्जेक्ट ने काम किया है, जोड़कर जोड़ा है। सीधे setFocusOnFlash() जारी नहीं किया गया था। मुझे लगता है कि यह चाल बस इतना है कि आपके द्वारा निर्दिष्ट विलंब के बावजूद, समय-समय पर कॉलबैक केवल ब्राउज़र परिवर्तन को संसाधित करने के बाद बुलाया जाता है। लेकिन फ़ायरफ़ॉक्स पर इस छोटी देरी से फोन करना बहुत जल्दी था; इसने object तत्व (इसे नहीं करना चाहिए) के आसपास एक बिंदीदार सीमा डाली है और फ्लैश को मुख्य स्ट्रोक नहीं मिला है। 250 में देरी को सेट करने से यह मेरे कंप्यूटर पर तय हो गया है, लेकिन कौन जानता है कि आपको कितनी बड़ी देरी की आवश्यकता है। (बदतर, setFocusOnFlash कॉल दोहराने में मदद नहीं की गई ... एक बार जब बिंदीदार सीमा वहां थी, तो उनके पास कोई और प्रभाव नहीं पड़ा।) तो, मैंने फ़्लैश दस्तावेज़ वर्ग निर्माता को कॉलबैक जोड़ने के बजाय ExternalInterface.call("flashLoaded") कॉलबैक जोड़ दिया है। स्पष्ट होने के लिए, आप फ्लैश/एक्शनस्क्रिप्ट में ऐसा करते हैं, इसलिए आपको स्रोत या एसडब्ल्यूएफ फ़ाइल के लेखक तक पहुंच की आवश्यकता है। इस तरह, जब एसडब्ल्यूएफ शुरू होता है, तो यह एम्बेडिंग HTML पृष्ठ की flashLoaded जावास्क्रिप्ट विधि को कॉल करता है, इसलिए आप जानते हैं कि यह तैयार है।

function flashLoaded() { 
    // Oddly, directly calling setFocusOnFlash() didn't work on IE8 
    setTimeout(setFocusOnFlash, 1); 
} 
0

जिस विधि का आप उपयोग कर रहे हैं वह केवल इंटरनेट एक्सप्लोरर के साथ काम करेगा - यह फ़्लैश का उपयोग करने के तरीके की एक सीमा है।

http://kb2.adobe.com/cps/155/tn_15586.html

+0

और क्या क्रोम और अन्य ब्राउज़रों के साथ ऐसा करने का कोई तरीका है, या ऑटो-फ़ोकस करने वाला फ्लैश है, ऐसा नहीं लगता कि आपको ऐसा करना चाहिए/कर सकता है? – joon

+0

ऐसा करने का एक तरीका हो सकता है, लेकिन मुझे यकीन है कि इसे अभी तक नहीं मिला है। –

1

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

0

मैं सख्त सिर्फ अपने खुद के फ़्लैश खेल विकास में तेजी लाने के मेरे खेल का परीक्षण करने के हर बार क्लिक करने के लिए होने से बचने के लिए इस काम पाने के लिए, देख रहा था: जैसा होता था। तो मुझे परवाह नहीं था कि यह सभी ब्राउज़रों में काम करता है, तो यहां एक ऐसा है जो केवल क्रोम पर काम करता है।

<body onload='document.getElementById("haxe").focus();'> 
    <embed src="game.swf" id="haxe" ... 

इससे पहले कि आप ध्यान केंद्रित() की कोशिश की है और यह आपके लिए काम नहीं किया, ध्यान दें कि आप सिर्फ टैग, नहीं वस्तु और परम संस्करण एम्बेड का उपयोग करना होगा है।

क्रोम संस्करण 40.0.2214.93 (64-बिट) पर परीक्षण किया गया।

संबंधित मुद्दे

 संबंधित मुद्दे