Як зробити фокус на фоні завантаження?

Я намагався встановити цю тестову сторінку для моєї флеш-ігри, але вона відмовляється концентруватися на завантаженні. Я прочитав купу записів форуму і не отримав його, щоб нічого зробити, я не можу повірити, що це повинно бути настільки важко.

Ось що я маю:

  <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"!
}

Крім того, для елемента потрібно також focus() не мав ефекту. (Я використав jquery.flash Стефана Беланжера, де ви можете вказати wmode ; припускаю, що це також можливо за допомогою SWFObject .)

Але складніша частина полягає в тому, що ви не повинні називати setFocusOnFlash занадто рано. Для Chrome і IE додавання setTimeout (setFocusOnFlash, 1) безпосередньо після JavaScript, що вставляє об'єкт працював. Пряме видання setFocusOnFlash() не було. Я припускаю трюк просто, що часові виклики викликаються лише після того, як браузер повністю обробляв зміну документа, незалежно від затримки, яку ви вказали. Але на Firefox, який викликав цю невелику затримку, було занадто рано; він поставив пунктирну рамку навколо елемента object (він не повинен), і Flash не отримав штрихи клавіш. Установка затримки до 250 фіксувала це на моєму комп'ютері, але хто знає, наскільки потрібна велика затримка. (Гірше того, повторення викликів setFocusOnFlash не допомогло і ... коли одна сторона пунктирної лінії там була, вони не мали подальшого ефекту.) Таким чином, що я зробив замість того, щоб додати ExternalInterface. call ("flashLoaded") зворотного виклику до конструктора класу документів flash . Щоб бути зрозумілим, ви це робите в Flash/ActionScript, тому вам потрібен доступ до джерела або до автора файлу SWF. Таким чином, коли починається SWF, він називає метод JavaScript flashLoaded вбудованої HTML-сторінки, так що ви знаєте, що він готовий. Функція виглядала так:

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

6
додано

Я відчайдушно хотів отримати цю роботу, щоб пришвидшити розробку власної Flash-ігри, щоб не натискати кожен час, щоб протестувати свою гру. Тому мені все одно, що він працює у всіх веб-переглядачах, і ось той, який працює лише в Chrome.

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

Якщо ви спробували фокус() раніше, і це не допомогло вам, зверніть увагу, що вам слід використовувати лише тег вставляти , а не об'єкт і параметр.

Випробувано в Chrome версії 40.0.2214.93 (64-біт).

1
додано

Спосіб зробити це полягає в тому, щоб використовувати ExternalInterface і відправити фокус на Flash за допомогою JS-слухача в події вкладки (тобто, як вкладка віддаляється від елемента перед Flash). На практиці це важко, і обробка stage.focus у вашому AS потребує вирішення деяких, erm, quirks. Але це дійсно багато крос-браузера

1
додано

Метод, який ви використовуєте, працюватиме лише з Internet Explorer - це обмеження способу використання спалаху.

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

0
додано
і чи є який-небудь спосіб це зробити з Chrome та іншими веб-переглядачами, чи автоматично фокусує флеш, просто не думайте, що ти маєш/можеш це зробити?
додано Автор joon, джерело
Там може бути спосіб зробити це, але я, напевно, ще не зрозумів це.
додано Автор Justin Beckwith, джерело