![](/img/trans.png)
[英]How can I test Java applet with different Java versions in Firefox?
[英]How can I test that a java applet is loaded using javascript?
小程序是我自己的,调用ready()只返回“是”。
首先,我尝试嵌入这样的applet:
<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>
我试着通过在document.ready上调用ready()来检查它是否已经加载了javascript,但是我立刻得到了一个错误(TypeError:$(...)。get(...)。ready不是函数)所以我假设它在加载之前尝试调用applet ready()函数。
$(function(){
if (CheckApplet() == false) {
$('#appletStatus').html('Failed to load applet.');
}
});
function CheckApplet() {
return $('#applet').get(0).ready() == 'yes';
}
然后我尝试用这样的jquery加载applet:
这样做效果好一点,在applet加载之前它没有调用applet ready()函数。 但偶尔它不起作用,javascript变得没有响应,即使applet似乎加载好,也不会产生错误。
$(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.');
}
});
我正在寻找关于如何改进这个或其他方法来实现解决方案的建议。
当你刚知道你的applet活跃时(必须运行JVM,下载并运行.jar和.ready()必须连接到浏览器),让applet告诉浏览器什么时候更好的策略准备好了。 它可以通过调用名为applet_ready()的JS函数来实现。
请参阅此处applet如何调用JavaScript函数: http : //docs.oracle.com/javase/tutorial/deployment/applet/invokingJavaScriptFromApplet.html
我喜欢dronus的答案,但没有发现Oracle的链接非常有用,所以这里是我的完整代码,这花了我一段时间来整理(是的,我知道,我有点慢)。
在applet类的init()方法结束时(示例中为'myApplet'):
JSObject window = JSObject.getWindow(this);
Runnable r = new RunJScript(window);
new Thread(r).start();
在与applet类相同的包中的新单独类中:
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);
}
}
在包含您的applet的网页标题中:
<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>
如果您无权访问applet源代码,则可以在调用其上的方法之前轮询要加载的applet。
看看这个答案: https : //stackoverflow.com/a/7150084/513173
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.