2013-08-28 9 views
5

Das Applet ist mein eigenes, Aufruf bereit() gibt einfach "Ja" zurück.Wie kann ich testen, dass ein Java-Applet mit JavaScript geladen wird?

Zuerst habe ich versucht das Applet wie das Einbetten:

 <object id="appletIe" 
     classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" 
     width="100%" height="100%" 
     codebase="MyApplet.jar"> 
     <param name="archive" value="MyApplet.jar" /> 
     <param name="code" value="MyPackage.Myclass" /> 
     <param name="myParam" value="My Param Value" /> 
     <embed id="applet" MAYSCRIPT=true 
     type="application/x-java-applet;version=1.6" 
     width="1px" height="1px" 
     archive="MyApplet.jar" 
     code="MyPackage.Myclass" 
     pluginspage="http://java.com/download/"> 
     </object> 

Ich habe versucht, es zu überprüfen, wurde mit Javascript geladen, indem bereit() aufrufen, auf document.ready wie folgt aus: aber ich bekam sofort einen Fehler (Typeerror : $ (...). get (...). Bereit ist keine Funktion) so nehme ich an, es versucht, die applet ready() -Funktion aufzurufen, bevor es geladen wurde.

$(function(){ 
    if (CheckApplet() == false) { 
      $('#appletStatus').html('Failed to load applet.'); 
     } 
    }); 



    function CheckApplet() { 
     return $('#applet').get(0).ready() == 'yes'; 
    } 

Dann habe ich versucht das Applet mit jquery wie folgt geladen:

Das funktionierte ein wenig besser, es nicht das Applet bereit angerufen hat() Funktion, bis das Applet geladen hatte. Aber ab und zu funktioniert es nicht, das JavaScript reagiert nicht mehr, es wird kein Fehler erzeugt, obwohl das Applet scheinbar geladen ist.

$(function(){ 
    var html = ''; 

    if ($.browser.msie) { 
     html += '<object id="applet" '; 
     html += 'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '; 
     html += 'width="100%" height="100%" '; 
     html += 'codebase="MyApplet.jar"> '; 
     html += '<param name="archive" value="MyApplet.jar" /> '; 
     html += '<param name="code" value="MyPackage.Myclass" /> '; 
     html += '<param name="myParam" value="My Param Value" /> '; 
     html += '< /object>'; 
    } else { 
     html += '<embed id="applet"'; 
     html += 'type="application/x-java-applet;version=1.6"'; 
     html += 'width="1px" height="1px" '; 
     html += 'archive="MyApplet.jar"'; 
     html += 'code="MyPackage.Myclass" '; 
     html += 'pluginspage="http://java.com/download/"'; 
     html += 'myParam="My Param Value" />'; 
     html += '</embed>'; 
    } 
    $('#myDiv').append(html); 

if (CheckApplet() == false) { 
      $('#appletStatus').html('Failed to load applet.'); 
     } 

}); 

Ich bin auf der Suche nach Vorschlägen, wie ich das verbessern kann, oder andere Möglichkeiten, um die Lösung zu erreichen.

Antwort

7

Wie Sie neueren wissen, wenn Ihr Applet lebendig wird (die JVM muss ausgeführt werden, die .jar heruntergeladen und ausgeführt werden und .ready() muss mit dem Browser verbunden sein) wäre es eine bessere Strategie, das Applet zu erzählen der Browser, wenn es fertig ist. Dies kann geschehen, indem beispielsweise eine JS-Funktion namens applet_ready() aufgerufen wird.

Sehen Sie hier wie ein Applet JavaScript-Funktionen aufrufen können: http://docs.oracle.com/javase/tutorial/deployment/applet/invokingJavaScriptFromApplet.html

+0

Genau das, was ich brauchte. Vielen Dank – andrew

7

ich dronus Antwort mochte aber nicht finden Oracle Link sehr nützlich zu sein, so ist hier meine volle Code, der eine Weile, nahm zu sortieren (Ja, ich weiß, ich bin ein bisschen langsam).

Am Ende der init-Applet-Klasse() -Methode ('MyApplet' im Beispiel):

JSObject window = JSObject.getWindow(this); 
Runnable r = new RunJScript(window); 
new Thread(r).start(); 

In einer neuen separaten Klasse im selben Paket wie Ihre Applet-Klasse:

import netscape.javascript.JSObject; 

public class RunJScript implements Runnable 
{ 
    private JSObject window; 
    public RunJScript(JSObject window) 
    { 
     this.window = window; 
    } 

    public void run() 
    { 
     window.call("waitUntilAppletLoaded", null); 
    } 

}

In den Web-Seiten-Header, die das Applet enthalten:

<SCRIPT language="javascript"> 
    timeOut = 0; 
    function waitUntilAppletLoaded() 
    { 
     if (document.applets['myApplet'].isActive()) 
     { 
      // Your actions now that the applet has finished loading. 
     } 
     else 
     { 
      // Increase the timeout by half a second each time round. 
      timeOut = timeOut + 500 
      settimeout(waitUntilAppletLoaded(),timeOut) 
     } 
    } 
</SCRIPT> 
1

Wenn Sie keinen Zugriff auf den Applet-Quellcode haben, können Sie abfragen, ob das Applet geladen werden soll, bevor Methoden aufgerufen werden.

Werfen Sie einen Blick auf diese Antwort: https://stackoverflow.com/a/7150084/513173

Verwandte Themen