Flash obyektimni yuklashga e'tibor qaratishim kerakmi?

Men flesh-test uchun ushbu test sahifasini o'rnatishga harakat qilmoqdaman, lekin u yuklashga e'tibor berishdan bosh tortadi. Men bir nechta forum yozuvlarini o'qidim va hech narsa qila olmadim, bu juda qiyin bo'lishi kerakligiga ishonmayman.

Menda nima bor:

  <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;">
      
Alternative content

</div> </div> </body>

You can see it live here, http://joon.be/exclusivepreview/

bunga nima bo'ldi? SwfObject haqida juda chuqur bilimim yo'q ...

5

4 javoblar

Men Firefox 16, Chrome 23 va IE 8 da ishlaydigan usulni topdim (ular shu paytgacha men uni sinab ko'rdim). Albatta, bu shunchaki hacklardir, shundagina u abadiy ishlashini biladi ... lekin bu, albatta, ishlarni yomonlashtirmaydi.

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

Faqat Firefox-da object elementi ostidagi kerakli yoki focus() ta'siri yo'q edi. (Men wmode ni tanlashingiz mumkin bo'lgan jquery.flash ) ni ishlatganman; SWFObject bilan ham mumkin.)

Lekin trickier qismi setFocusOnFlash deb atalmasligingizdir. Chrome va IE uchun setTimeout (setFocusOnFlash, 1) qo'shilgan JavaScript-dan keyin to'g'ridan-to'g'ri ob'ekt qo'shilgan. To'g'ridan-to'g'ri setFocusOnFlash() chiqarib berishmadi. Men o'ylaymanki, hodisalar shunchaki vaqtinchalik chaqiruvlar brauzer siz belgilagan kechikishdan qat'i nazar, hujjatning o'zgarishini to'liq qayta ishlagandan so'nggina chaqirilishi mumkin. Biroq, bu kichik kechikish bilan chaqirgan "Firefox" da juda erta edi; ob'ekt elementiga (nuqta qo'yilmasligi kerak) atrofida nuqta bilan chekka qo'yishdi va Flash kalitlarni urishmadi. Kechiktirishni 250ga sozlash mening kompyuterimga o'rnatildi, lekin siz qanchalik katta kechikish kerakligini kim biladi. (Bundan ham yomoni, setFocusOnFlash chaqiruvlarini takrorlash ... bu erda nuqta cheklangan bo'lsa, ularning ta'siri yo'q edi.) Shunday qilib, nima qilsam, u ExternalInterface. Fleshli hujjat sinf quruvchisiga qo'ng'iroq qilish ("flashLoaded") . Tushunish uchun siz buni Flash/ActionScript da bajarasiz, shuning uchun siz manbaga yoki SWF faylining muallifiga kirishingiz kerak. Shunday qilib, SWF ishga tushirilganda HTML kodini flashLoaded JavaScript usulini chaqiradi, shuning uchun uni tayyor deb bilasiz. Funktsiya quyidagicha edi:

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

Men ushbu o'yinni ko'rish uchun umidvor edim, o'yinni sinab ko'rish uchun har doim bosishni boshlamaslik uchun o'z Flash o'yinini rivojlantirishni tezlashtirish. Shuning uchun u brauzerlarda ishlayotgan bo'lsa ham, menimcha, shuning uchun faqat Chrome'da ishlaydi.

<body onload='document.getElementById("haxe").focus();'>
    

Agar diqqat markazida() oldin ishlagan bo'lsangiz va u siz uchun ishlamagan bo'lsa, ob'ektni va param versiyasini emas, balki embed yorlig'ini ishlatish kerakligini eslang.

Chrome versiyasi 40.0.2214.93 (64-bit) da sinovdan o'tgan.

1
qo'shib qo'ydi

Buning uchun ExternalInterface-dan foydalanish va yorliqdagi hodisada JS tinglovchisi yordamida (masalan, yorliq Flashdan oldin elementdan uzoqlashtirilganda) Fokusni yuborish. Amalda bu juda murakkab va sahnada. Sizning AS-ga murojaat qilishingiz kerak bo'lgan ba'zi narsalar bilan shug'ullanish kerak. Biroq, u juda ko'p cross brauzer ishlaydi

1
qo'shib qo'ydi

Siz foydalanadigan usul faqat Internet Explorer bilan ishlaydi - bu flibs ishlatiladigan cheklov.

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

0
qo'shib qo'ydi
va Chrome va boshqa brauzerlar bilan buni amalga oshirish uchun biron-bir usul bormi, yoki siz avtomatik ravishda o'ylashingiz kerak emas deb o'ylaysizmi?
qo'shib qo'ydi muallif joon, manba
Buni qilishning usullari bo'lishi mumkin, ammo ishonchim hali aniq emas.
qo'shib qo'ydi muallif Justin Beckwith, manba