Проблема объектного фокуса в браузерах Safari и Chrome - PullRequest
8 голосов
/ 27 февраля 2009

У меня следующий javascript, вызываемый для запроса фокуса при загрузке страницы.

Этот код работает на 100% нормально с Firefox и IE7, но Chrome и Safari, похоже, вообще не смещают фокус. Как заставить его работать со всеми браузерами?

 document.getElementById("MyFlashFile").focus();

Ответы [ 5 ]

16 голосов
/ 15 сентября 2010

Мне потребовались часы на поиск в Интернете, но в конце концов я нашел решение, которое работает на последних версиях IE, Firefox, Chrome и Safari. Следующий код решает проблему навсегда:

<head>
  <script type="text/javascript" src="swfobject.js"></script>
  <script>
    function setFocusOnFlash() {
      var f=swfobject.getObjectById('myFlashObjectId');
      if (f) { f.tabIndex = 0; f.focus(); }
    }
  </script>
</head>
<body onload="setFocusOnFlash()">

В этом примере предполагается, что флэш-память встроена с использованием библиотеки SWFObject. Если нет, вам следует установить для переменной f значение Object или Embed tag, которое содержит флэш-ролик.

Отредактировано 5 мая 2012 г. : К сожалению, похоже, что обходной путь tabIndex больше не работает для всех комбинаций браузера (Chrome / Safari) и операционной системы. Например, в настоящее время Chrome 18 в Windows дает сбой.

См. Ссылку ниже, предоставленную Christian Junk , чтобы узнать статус решения проблемы.

4 голосов
/ 28 февраля 2009

К сожалению, нет способа гарантировать, что вы можете установить фокус на флэш-файл, который работает во всех браузерах. IE и Firefox решили эту проблему (по большей части), но Chrome и Safari основаны на Webkit, который не имеет решения.

Если вы когда-нибудь заметили на YouTube или другом видео / флеш-сайте, что первое, что вы видите, это что-то, что побудит вас нажать на плеер, это связано с этой проблемой.

Один разработчик предложил хитрый обходной путь, но он включает в себя добавление некоторого ActionScript в ваш флэш-файл, это может быть проблемой в заднице, если вы создаете универсальный проигрыватель.

Гэри Бишоп: Исправление Firefox Flash глупости

Другим решением является установка непрозрачного режима wmode. Я слышал, что это работает в некоторых ситуациях, но испортит курсоры в текстовых областях. Мне тоже не очень повезло с этим, но вы можете дать ему шанс.

Вы можете найти больше информации об ошибке без фокуса на bugzilla .

4 голосов
/ 09 февраля 2010

Похоже, что в Chrome есть ошибка:

"window.document.getElementById ('swfID'). Focus () не работает для flash-объектов"

http://code.google.com/p/chromium/issues/detail?id=27868

Я пытался найти обходной путь, но я не смог его найти; (

С уважением, Christian

1 голос
/ 16 мая 2011

В дополнение к ответу Клаудио Сильвы необходимо установить wmode="opaque"

0 голосов
/ 27 февраля 2009

Убедитесь, что этот код вызывается после отображения страницы вся . Вероятно, он вызывается над HTML, на который ссылается, поэтому элемент еще не будет существовать.

В различных инфраструктурах JavaScript есть утилиты, которые сообщают вам, когда DOM готов .

...