J'ai un code Java de longue durée s'exécutant dans un thread démarré par une applet Java. Dès que le code est terminé, il contient des informations pour l'utilisateur. J'aimerais transmettre ces informations à un rappel JavaScript de manière thread-safe. Le simple fait d'utiliser l'API Java DOM pour modifier le document HTML n'est pas suffisant, à moins que mon rappel JavaScript ne soit appelé en tant qu'effet secondaire dans un thread sécurisé (c'est-à-dire dans le même thread de navigateur où les callbacks JavaScript s'exécutent). Comment puis-je l'implémenter? Y a-t-il des bibliothèques qui le font déjà?Comment appeler un rappel JavaScript à partir d'un thread d'applet Java?
Répondre
Il semble qu'il n'y ait pas de tutoriel public sur la façon de le faire. L'ensemble de l'interface JavaScript - Java est sous-documenté et il est soumis à des limitations du navigateur.
On dirait que l'API DOM commune est ce dont vous avez besoin. En substance, vous demandez à un DOMService de vous rappeler sur le thread principal de l'interface utilisateur lorsqu'il est bon et prêt.
http://docs.oracle.com/javase/1.5.0/docs/guide/plugin/developer_guide/java_js.html
Comme je comprends les choses, JSObject est la "ancienne" et l'API DOM Common est la façon plus récente (en Java 6). Ce que vous devez faire est d'appeler une méthode de votre applet et passer l'objet de la fonction que vous voulez rappeler. Votre applet appelle ensuite cet objet de fonction depuis votre DOMAction.
Je n'ai pas de code à portée de main pour vous montrer et ce n'est pas quelque chose que j'ai fait avant d'utiliser Java. Cependant, j'ai utilisé une technique similaire avec un plugin web NPAPI écrit en C++, c'est-à-dire que JS appelait mon objet C++ en passant une fonction en paramètre, et que l'objet C++ appelait la fonction JS à un stade ultérieur. "J'espère que cela aide.
Bien sûr, mais que dois-je écrire à mon dans ma 'DOMAccessor.run'? Dois-je essayer d'obtenir une référence à un 'JSObject', et essayer d'invoquer un callback à partir de là? Ou devrais-je essayer de modifier le DOM, et j'espère que JavaScript peut le détecter (par exemple DOMAttrModified) - mais cela n'est pris en charge que dans la minorité des navigateurs, et non pris en charge dans Internet Explorer. Pourriez-vous donner un exemple de code croisé qui fonctionne? – pts
J'ai eu des problèmes de concurrence avec plusieurs threads applet appelant Javascript. Certains des appels ont simplement été ignorés par Internet Explorer 8 (Firefox 3.6 et Safari 5 ont bien fonctionné).
J'ai essayé d'emballer les appels à Javascript avec DOMService.invokeAndWait - cela n'a pas aidé. J'ai fini par m'assurer que tous les appels Java-> Javascript sont faits à partir du même thread, et mes problèmes ont été résolus (au moins temporairement - je n'ai pas vérifié ce qui se passe si le thread Javascript est occupé par certains utilisateurs ...). travail initié).
Pour sérialiser les appels, je Executors.newSingleThreadExecutor
- 1. Comment enregistrer un rappel JavaScript dans une applet Java?
- 2. comment appeler une fonction java à partir de javascript?
- 3. Comment appeler javascript à partir de l'applet sans utiliser showDocument?
- 4. appeler un javascript à partir d'un flash?
- 5. Comment appeler javaScript à partir d'Objective C?
- 6. Comment appeler un processus Java à partir de Windows Powershell?
- 7. Appeler Groovy ou Java à partir de JavaScript
- 8. Comment appeler un service Web ASPNET à partir de javascript?
- 9. Appeler Snarl à partir du code java
- 10. QT + Comment appeler un emplacement à partir d'un code C++ personnalisé s'exécutant dans un thread différent
- 11. Accéder au thread principal avec le rappel
- 12. Appeler javascript à partir du code derrière
- 13. Appeler une URL à partir de javascript
- 14. Comment appeler une fonction python à partir d'un thread de langue étrangère (C++)
- 15. Comment interrompre un autre thread à partir d'un moniteur Thread
- 16. Puis-je appeler stream.Fermer à partir d'un autre thread?
- 17. Appeler javascript à partir d'un code derrière vs appeler un code derrière javascript
- 18. Comment mettre en œuvre un rappel de téléphone à javascript
- 19. Tuer un processus Java démarré à partir d'un thread
- 20. appeler un service web java à partir de la page html et javascript
- 21. appelant un rappel à partir d'un thread à l'aide de pointeurs de fonction
- 22. Comment appeler une fonction javascript à partir d'une servlet?
- 23. Comment appeler une applet à partir d'un autre fichier Java?
- 24. comment appeler une fonction javascript à partir de mon contrôleur?
- 25. Comment appeler la fonction jquery à partir d'un code javascript?
- 26. Comment puis-je appeler java à partir d'ASP?
- 27. Rhino: comment appeler la fonction JS à partir de Java
- 28. Comment appeler des classes Java à partir de JSP
- 29. Comment appeler une fonction JavaScript à partir du code C#
- 30. Comment appeler une méthode .cs à partir d'une fonction JavaScript?
Mais jetez un oeil ici: https://jdk6.java.net/plugin2/liveconnect/ – flup