Comment puis-je intégrer une applet Java dynamiquement avec Javascript?
Je veux être capable d'insérer un applet Java dans une page web de façon dynamique à l'aide d'une fonction Javascript qui est appelée lorsque le bouton est pressé. (Le chargement de l'applet sur la page de la charge ralentit les choses trop, gèle le navigateur, etc...), je suis en utilisant le code suivant qui fonctionne de manière transparente dans les FF, mais échoue sans erreur les messages dans IE8, Safari 4, Chrome et. Quelqu'un a une idée de pourquoi cela ne fonctionne pas comme prévu, et comment insérer dynamiquement une applet dans une manière qui fonctionne dans tous les navigateurs? J'ai essayé d'utiliser document.write()
comme le suggère d'ailleurs, mais en l'appelant qu'une fois la page chargée des résultats dans la page effacée, qui n'est pas une option pour moi.
function createPlayer(parentElem)
{
//The abc variable is declared and set here
player = document.createElement('object');
player.setAttribute("classid", "java:TunePlayer.class");
player.setAttribute("archive", "TunePlayer.class,PlayerListener.class,abc4j.jar");
player.setAttribute("codeType", "application/x-java-applet");
player.id = "tuneplayer";
player.setAttribute("width", 1);
player.setAttribute("height", 1);
param = document.createElement('param');
param.name = "abc";
param.value = abc;
player.appendChild(param);
param = document.createElement('param');
param.name = "mayscript";
param.value = true;
player.appendChild(param);
parentElem.appendChild(player);
}
source d'informationauteur Jonathan
Vous devez vous connecter pour publier un commentaire.
Va remplacer l'ensemble de votre document. Si vous souhaitez conserver le document, et vous voulez juste une applet ajoutée, vous aurez besoin de l'ajouter.
Ce code permettra d'ajouter l'applet comme le dernier élément de la balise body. Assurez-vous que c'est courir après le DOM a traitées ou vous obtiendrez une erreur. Body OnLoad, ou jQuery prêt recommandé.
J'aurais suggéré de faire quelque chose comme ce que vous faites; je suis donc perplexe quant à pourquoi il ne fonctionne pas.
Voici un document qui ressemble assez d'autorité, venant de la bouche des chevaux. Il mentionne les particularités des différents navigateurs. Vous pouvez finir par avoir besoin de faire autre balise soupes pour les implémentations différentes.
Mais peut-être il ya quelque chose de magique dans l'applet/balises d'objet qui les maintient en cours de traitement si elle est insérée de façon dynamique. N'avoir plus de conseils d'expert, j'ai un fou de solution à vous proposer: Howzabout vous présenter l'applet sur une page différente, et de créer dynamiquement un
IFRAME
pour afficher la page correspondante dans l'espace de votre applet doit occuper? Les IFRAMEs sont un peu plus cohérente dans la syntaxe dans les navigateurs, et je serais surpris si ils étaient à l'échec de la même façon.Peut-être que vous devriez utiliser votre navigateur outils de débogage pour regarder les DOM après vous remplacer dans votre applet nœud. Peut-être qu'il n'apparaissant pas à l'endroit où vous pensez qu'il est, ou pas avec la structure que vous pensez que vous êtes en train de créer. Votre code est OK pour moi, mais je ne suis pas très expérimenté avec la dynamique des applets.
Il y est une bibliothèque JavaScript pour cet effet:
http://www.java.com/js/deployJava.js
J'ai fait quelque chose de similaire à ce que Beachhouse suggéré. J'ai modifié le deployJava.js comme ceci:
Il a travaillé sur ok sur Chrome, Firefox et IE. Pas de problèmes jusqu'à présent.
J'ai essayé d'abord d'avoir un
div
déjà créé sur mon fichier html et juste définir sesinnerHTML
à laappletString
mais seulement IE ont été en mesure de détecter la nouvelle applet de façon dynamique. Insérez l'ensemble de ladiv
directement à labody
fonctionne sur tous les navigateurs.Créer un nouvel élément applet et l'ajouter à un élément existant à l'aide de appendChild.
...
...
Aussi, assurez-vous que l'élément existant est visible, ce qui signifie que vous n'avez pas défini de css pour le cacher, sinon que le navigateur ne charge pas l'applet après l'utilisation de appendChild. J'ai passé trop d'heures à essayer de comprendre.
Cela a fonctionné pour moi:
-----code html: