2010-11-04 5 views
0

J'ai une page Web avec une applet comme le seul élément qui ressemble à ceci:Applet perd définitivement mise au point lorsque je quitte le navigateur et Coming Back

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>...</title> 
</head> 
<body> 
<applet style="padding:1px; border:1px solid gray" mayscript="mayscript" codebase="..." name="AppletName" code="..." archive="..." width="600" height="500" alt="Alt Text"> 
    <param name="initial_focus" value="true"/> 
    Alt Text 
</applet> 
</body> 
</html> 

Lorsque la page charge initialement, mise au point est dans l'applet et je peux passer à travers et interagir avec l'applet très bien. Cependant, si je quitte la fenêtre du navigateur pour y revenir, je ne peux plus me concentrer sur l'applet en utilisant simplement la touche de tabulation.

L'appui sur F5 pour recharger la page corrige la page afin que l'applet redevienne active, mais cette solution est inacceptable.

Comment résoudre ce problème? Merci.

+0

Je m'attends à ce que le paramètre 'initial_focus' ne fonctionne que lorsque l'applet est chargé initialement. Vraisemblablement, lorsque vous naviguez vers un autre onglet/page et retour, le focus est perdu pour l'applet afin qu'il ne le récupère pas automatiquement. OTOH notant que l'indicateur mayscript est ajouté, vous pouvez rechercher une solution basée sur JavaScript pour retourner le focus à l'applet chaque fois que la page redevient active. –

+0

@Andrew, en effet, le paramètre initial_focus ne me donne vraiment rien parce que l'applet semble gagner du focus par défaut sur la charge de toute façon. Et oui, j'ai eu un succès modéré en utilisant document.AppletName.requestFocus() mais j'ai du mal à trouver l'événement/stratégie idéal pour détecter quand l'applet n'a pas de focus et ensuite appeler requestFocus. –

+0

Je ne me suis pas beaucoup plongé dans JavaScript, donc je n'ai pas d'idées brillantes (les programmeurs Java sont presque les pires gens de la planète à poser des questions sur JS, de toute façon). Je suppose qu'il existe un tag javascript que vous pouvez ajouter à votre message? Si oui, vous pourriez le faire et attirer l'attention de certains gourous JS. –

Répondre

0

solution provisoire:

//Dean Edwards/Matthias Miller/John Resig 
function init() { 
    // quit if this function has already been called 
    if (arguments.callee.done) return; 

    // flag this function so we don't do the same thing twice 
    arguments.callee.done = true; 

    // kill the timer 
    if (_timer) clearInterval(_timer); 

    window.onfocus = function() { 
    if(!document.AppletName.isActive()) 
     document.AppletName.requestFocus(); 
    }; 
} 

/* for Mozilla/Opera9 */ 
if (document.addEventListener) { 
    document.addEventListener("DOMContentLoaded", init, false); 
} 

/* for Internet Explorer */ 
/*@cc_on @*/ 
/*@if (@_win32) 
    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>"); 
    var script = document.getElementById("__ie_onload"); 
    script.onreadystatechange = function() { 
    if (this.readyState == "complete") { 
     init(); // call the onload handler 
    } 
    }; 
/*@end @*/ 

/* for Safari */ 
if (/WebKit/i.test(navigator.userAgent)) { // sniff 
    var _timer = setInterval(function() { 
    if (/loaded|complete/.test(document.readyState)) { 
     init(); // call the onload handler 
    } 
    }, 10); 
} 

/* for other browsers */ 
window.onload = init; 

Notez que la partie clé pour détecter si les besoins de l'applet se concentrer et lui demandant si oui est (cela ne fonctionne que si mayscript est activée):

if(!document.AppletName.isActive()) 
    document.AppletName.requestFocus(); 

Les reste du code est juste attacher la fenêtre sur la manipulation de mise au point après le chargement de la page (en utilisant le script JQuery.ready est basé sur).

De meilleures solutions sont les bienvenues.

Questions connexes