Апплет, предотвращающий фокусировку в IE - PullRequest
3 голосов
/ 03 мая 2010

Я попытался навести курсор на область ввода, и IE вызвал у меня много головной боли. Я пробовал что-то в этом духе (тоже изменив таймаут на большие числа):

setTimeout(function() { document.getElementById('myInput').focus(); }, 10);

и это не сработает. Я заметил, что у меня также есть апплет на странице, и когда я удаляю апплет, работает выше. Также, если я поставлю предупреждение перед триггером focus(), оно будет работать.

Апплет ничего не делает конкретно (он фактически извлекает MAC-адрес пользователя) и в конце делает один вызов внешней функции JS для отправки MAC-адреса в DOM. Я попытался поместить фокус (тайм-аут и все) в конец этой функции JS, но это тоже не сработает.

Что может быть не так? В Firefox все работает хорошо, но не в IE.

Текущая настройка:

//This is called from within the applet using a window.call
function everythingDone()
{
$("#someinput").focus();
//setTimeout(function() { document.getElementById('someInput').focus(); }, 1000);
};

$(function() 
{
    var applet = "<object classid='clsid:CAFEEFAC-0014-0002-0000-ABCDEFFEDCBA' width='0' height='0'><param name='code' value='someapplet.class' /><param name='archive' value='/someapplet.jar' /></object>";
    $("#appletarea").html(applet);
    //setTimeout(function() { document.getElementById('someInput').focus(); }, 1000);
});

Ответы [ 2 ]

8 голосов
/ 03 сентября 2010

Я думаю, что более простой обходной путь - использовать параметр initial_focus для тега applet / object / embed.

<applet ...>
    <param name="initial_focus" value="false"/>
</applet>
2 голосов
/ 16 июня 2010

Это печально известная ошибка в плагине Sun Java для IE. Вы можете найти полное обсуждение на http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4984794. К сожалению, ошибка закрыта как не воспроизводимая! Среди предложенных обходных путей для меня отлично работали следующие:

Crookster

Если кому-то интересно, я верю нашел обходной путь для этого.

В методе start () вашего апплета добавьте следующим образом:

Панель JPanel = новая JPanel (); this.add (панель); panel.addFocusListener (новый FocusAdapter () {публичный void focusGained (FocusEvent e) {JSObject победа = (JSObject) JSObject.getWindow (это); win.eval ( "onAppletLoad ();"); }}); panel.requestFocusInWindow ();

Затем в своем HTML-коде добавьте следующая функция:

функция onAppletLoad () { myField.focus (); // где myField поле, чтобы получить фокус !! }

Вам нужно будет импортировать следующее в апплет

import netscape.javascript. *; // Класс JSObject, используемый для получения HTML страница

и добавьте plugin.jar в ваш путь к классам. Вы найдете plugin.jar в вашей JRE Каталог / jre / lib (1.4.x +)

Хотя апплет имеет JPanel, просто установите размер 0,0, и вы не увидите это.

Надеюсь, это поможет

Shawn

...