2009-08-12 8 views
2

Je travaille pour une société en développement et je fais une refonte majeure sur une application Web, qui a tout rechargé après chaque clic, pour faire un usage intensif de Javascript, donc ça ressemble à une vraie application Web. L'une des fonctionnalités est d'utiliser un peintre basé sur le Web (pensez à MSPaint sur le Web), que j'incorpore sur la page à la demande. Une fois l'image peinte et téléchargée, l'application Web décharge l'applet et affiche le répertoire dans lequel le fichier a été téléchargé.Tuer Java Applet via Javascript

C'est là que le problème commence. Tout fonctionne sur IE et Safari, mais pas sur Firefox 3.5 (3.0 fonctionne parfaitement bien). Firebug me dit que la propriété expando est manquante.

L'application web Tiparlo sur laquelle je travaillais auparavant avait un problème similaire (en fait, toute manipulation effectuée sur une applet via jQuery est défectueuse) mais a résolu ce problème en enveloppant un div autour et en le masquant le div au lieu de l'applet. Ceci, malheureusement, n'est pas applicable sur cette application Web, car l'applet doit être détruite et non seulement cachée et affichée, car elle prend trop de ressources pour être exécutée tout le temps où elle n'est pas nécessaire.

Pour faire court: est-il possible de faire une applet se détruire par Javascript? Sinon: existe-t-il une solution de contournement au problème jQuery/expando/applet? Je sais que l'applet est obsolète en HTML 4.01 strict mais le changer en objet n'est pas une option pour le moment.

EDIT: J'ai ajouté une image de Firefox + Firebug pour vous montrer le vrai message d'erreur. Posting Code ne fait pas de dieu, car il fonctionne parfaitement sur tous les autres navigateurs et est un problème spécifique à Firefox 3.5. Here be pictures

Remarque: Vous pouvez ignorer le bogue JS provenant de button.js.

+4

(ne pas le cacher, le détruire avec removeElement et supprimer –

+1

J'ai essayé cela, mais en vain Ma théorie: J'imagine qu'en cachant le div parent, le Browser lui-même prend soin de cacher les enfants aussi et pas Javascript. En supprimant la div parent, c'est aussi Job de Javascript pour supprimer l'applet enfant provoquant l'apparition du Bug expando J'ai regardé le Bug Tracker de jQuery et ce bug particulier est listé sur la feuille de route pour la version 1.3.3. Puisque je ne peux pas attendre pour le réparer lui-même (être fixé par jQuery dev Team), je dois trouver une solution de contournement – Mike

Répondre

1

Vous pouvez toujours charger l'applet dans un iframe et simplement quitter la page sur laquelle l'applet est chargée. Cela va le tuer.

Votre autre option si vous voulez appeler la détruire de javascript serait de mettre quelque chose comme ça dans.

<script> 
    document.MyApplet.killApplet(); 
</script> 

public void killApplet() { 
    AccessController.doPrivileged(new PrivilegedAction() { 
     public Void run() { 
      // kill the JVM System.exit(0); return null; 
     } 
    }); 
} 

Ce n'est pas une belle façon de tuer un applet, mais sur les navigateurs plus récents, il ne jette pas une erreur JS, sur les plus anciens comme IE6 il va lancer une erreur js. Que se passe-t-il si vous détruisez le DIV qui entoure l'applet?

+0

Oui, celui-ci résout le problème (en génère un nouveau mais je peux gérer celui-ci) – Mike

+0

nouveau problème créé, juste curieux – Keibosh

+0

Si vous tuez l'applet après la fin de l'appel javascript, vous éviterez probablement l'erreur, vous pouvez le faire avec java.util.Tim er.schedule(). –

0

Je vous suggère de créer une classe qui surveille l'applet à tuer. exécuter le moniteur comme une sorte de servlet et obtenir javascript pour publier des commandes 'kill applet' quand il doit être tué.

Questions connexes