Як зрабіць мой флэш-аб'ект атрымаць фокус пры загрузцы?

Я спрабаваў наладзіць гэтую тэставую старонку для маёй флэш-гульняў, але яна адмаўляецца, каб атрымаць фокус на нагрузцы. Я прачытаў кучу запісаў на форуме і не атрымаць яго, каб зрабіць што-небудзь, я не магу паверыць, што гэта павінна быць так цяжка.

Вось што ў мяне ёсць:

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

што здарылася з ім? Я не вельмі глыбокія веды SWFObject ...

5

4 адказы

Я знайшоў спосаб, які працуе для мяне на Firefox 16, Chrome 23 і IE 8 (гэта дзе я адчуў яго да гэтага часу). Вядома, гэта куча дзівацтваў, так што хто ведае, калі ён будзе працаваць вечна ... але гэта, вядома, не робіць рэчы горш.

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

На Firefox толькі, <�парам імя = "Рэжым акна» значэнне = "непразрыстым»> пад аб'ект элемент быў таксама неабходны, ці ж факусоўкі() </кода > не было ніякага эфекту. (Я выкарыстаў Стывен Белэнджер-х jquery.flash , дзе можна паказаць WMODE , я мяркую, што гэта таксама магчыма з SWFObject .)

Але хітрэй частка з'яўляецца тое, што вы не павінны выклікаць setFocusOnFlash занадта рана. Для Chrome і IE, дадаўшы SetTimeout (setFocusOnFlash, 1) непасрэдна пасля JavaScript, які ўстаўляе аб'ект працаваў. Непасрэдна выдача setFocusOnFlash() ня. Я мяркую, што хітрасць заключаецца ў тым, што проста таймерныя зваротных выклікі выклікаецца толькі пасля таго, як браўзэр цалкам апрацаваў змены дакумента, незалежна ад затрымкі вы пакажа. Але на Firefox выклік з гэтай невялікай затрымкай было занадта рана; ён паставіў пункцірную рамку вакол аб'екта элемента (ён не павінен) і флэш ня атрымаць націску клавіш. Ўстаноўка затрымкі да 250 зафіксаваў гэта на маім кампутары, але хто ведае, як вялікая затрымка вам трэба. (Горш, паўтарыўшы setFocusOnFlash званкі не дапамагло ... калісьці, што пункцірнай мяжа была там, у іх не было ніякага далейшага эфекту.) Такім чынам, што я зрабіў замест гэтага дадання ExternalInterface. выклік ( "flashLoaded") зваротнага выкліку да ўспышкі канструктару класа дакумента. Каб было ясна, вы робіце гэта ў Flash/ActionScript, таму вы павінны мець доступ да крыніцы або да аўтара SWF-файла. Такім чынам, калі SWF пачынаецца, ён называе flashLoaded метад JavaScript у HTML-старонкі ўкладанні, так што вы ведаеце, што гэта будзе гатова. Функцыя была як:

function flashLoaded() {
   //Oddly, directly calling setFocusOnFlash() didn't work on IE8
    setTimeout(setFocusOnFlash, 1);
}
6
дададзена

Я адчайна шукае, каб атрымаць гэтую працу, толькі каб паскорыць сваё ўласнае развіццё флэш-гульні, каб пазбегнуць неабходнасці націскаць кожны раз, каб праверыць сваю гульню. Так што я не хвалюе, калі ён працуе ва ўсіх браўзэрах, так вось той, які працуе толькі на Chrome.

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

Калі вы ўжо спрабавалі фокус() раней, і ён не працуе для вас, звярніце ўвагу, што вы павінны выкарыстоўваць толькі <�моцны /> тэг ўстаўляць, а не аб'ект і парам версіі.

Праверана на Chrome версіі 40.0.2214.93 (64-біт).

1
дададзена

Спосаб зрабіць гэта складаецца ў выкарыстанні ExternalInterface і адправіць фокус Flash, выкарыстоўваючы JS слухача на закладцы падзеі (гэта значыць, як язычок перамяшчаецца ў бок ад элемента да таго, Flash). На практыцы гэта цяжка і апрацоўка Stage.focus ў вашай AS прыходзіцца мець справу з некаторымі, ERM, дзівацтвы. Але гэта сапраўды працуе даволі шмат крос-браўзэр

1
дададзена

Метад вы выкарыстоўваеце толькі будзе працаваць з Internet Explorer - гэта абмежаванне шляхам ўспышкі.

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

0
дададзена
і ці ёсць спосаб зрабіць гэта з дапамогай Chrome і іншых браўзэраў, альбо аўтаматычная факусоўка ўспышкі проста не думае, што вы павінны/можаце зрабіць?
дададзена аўтар joon, крыніца
Там можа быць спосаб зрабіць гэта, але я ўпэўнены, што не зразумеў яго яшчэ.
дададзена аўтар Justin Beckwith, крыніца