2010-05-03 3 views
3

J'ai essayé d'implémenter un curseur sur une zone de saisie et IE m'a donné beaucoup de maux de tête. J'ai essayé des choses le long de la ligne de (changer le délai d'attente trop, à un grand nombre):Applet empêchant le focus dans IE

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

et ça ne marchera pas. J'ai remarqué que j'ai une applet sur la page aussi, et quand je retire l'applet, le travail ci-dessus. Aussi, si je mets une alerte avant le déclencheur focus(), cela fonctionnera.

L'applet ne fait rien de particulier (il récupère en fait l'adresse MAC de l'utilisateur) et fait un appel à une fonction JS externe à la fin pour envoyer l'adresse MAC au DOM. J'ai essayé de mettre l'accent (timeout et tout) à la fin de cette fonction JS mais ça ne marchera pas non plus.

Qu'est-ce qui pourrait ne pas fonctionner? Les choses fonctionnent bien dans Firefox, mais pas dans IE.

configuration actuelle:

//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); 
}); 

Répondre

2

Ceci est un bug dans le plugin infâme Sun Java pour IE. Vous pouvez trouver une discussion complète au http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4984794. Malheureusement le bug est fermé car non reproductible! Parmi les solutions de contournement proposées, ce qui suit a très bien fonctionné pour moi:

Crookster

Si quelqu'un est intéressé, je crois que je trouvé une solution pour cela.

Dans votre méthode de démarrage de l'applet(), ajoutez les suivants:

panneau JPanel = new JPanel(); this.add (panneau); panel.addFocusListener (nouveau FocusAdapter() {public void FocusGained (FocusEvent e) {JSObject victoire = (JSObject) JSObject.getWindow (this); win.eval ("onAppletLoad();");}}) panel.requestFocusInWindow();

Ensuite, dans votre code HTML, ajoutez la fonction suivante:

fonction onAppletLoad() { myField.focus(); // où myField est le champ pour obtenir le focus !! }

Vous devez importer les éléments suivants dans l'applet

de netscape.javascript d'importation *. // Classe JSObject, utilisée pour obtenir le HTML page

et d'ajouter plugin.jar à votre classpath. Vous trouverez plugin.jar au sein de votre JRE /jre/lib (1.4.x +)

Bien que l'applet a un JPanel, juste définir la taille de 0,0 et vous ne verrez pas il .

Hope this helps

Shawn

8

Je pense qu'une solution plus simple est d'utiliser le paramètre initial_focus pour l'applet/objet/balise embed.

<applet ...> 
    <param name="initial_focus" value="false"/> 
</applet> 
+0

Merci! J'ai essayé 'setFocusable (false)' avec succès, mais cela a bien fonctionné! – Andy

+0

Merci pour cela, je viens de passer 4 heures à essayer de comprendre ce qui volait le focus, et comment l'éviter. C'est la solution. – Oversteer

+0

A travaillé pour moi aussi: IE9 + JRE 6u45 –

Questions connexes