经过多年成功维护使用旧版本的applet:
<script src="foo.js"></script>
嵌入Java applet的方法,我们无法掩盖我们的耳朵并唱“La la la!”了。
是时候使用了:
deployJava.runApplet()
当我使用点击处理程序触发此方法时(此处通过jQuery在按钮上使用事件侦听器,但无关紧要):
$('#button').click(function() {
deployJava.runApplet(attributes, parameters, version);
});
...它会清除整个现有文档并将其替换为applet。我需要知道的是如何将特定的DOM元素作为applet的容器,这样我的页面就不会被擦除。
它似乎是我可以以target: someElement
的形式传递的属性,其中“someElement”是DOM对象或元素的ID作为字符串。但是,我找不到这种属性的文档。
为了完成,以下是通过的内容:
/*here is where I imagine there might be an applicable attribute */
var attributes = {
name: "SomeName",
code: "some.class",
archive: "some.jar",
width: 640,
height: 400
};
var parameters = {
someParameter: someValue
};
var version = "1.5";
我可以document.write
重建文档所需的一切,但我相信你们都可以想象这个潜在客户看起来多么可怕。
任何指针都会非常感激。
答案 0 :(得分:6)
作为Christophe Roussy解决方案的替代方案,您可以在运行document.write
时覆盖deployJava.runApplet
。
像这样:
function docWriteWrapper(func) {
var writeTo = document.createElement('del'),
oldwrite = document.write,
content = '';
writeTo.id = "me";
document.write = function(text) {
content += text;
}
func();
writeTo.innerHTML += content;
document.write = oldwrite;
document.body.appendChild(writeTo);
}
然后:
docWriteWrapper(function () {
deployJava.runApplet(attributes, parameters, "1.6");
});
有点hackish但是就像魅力一样;)
答案 1 :(得分:4)
问题的核心是:deployJava.js使用document.write
。如果您在页面渲染后使用此方法(作为初始页面渲染的一部分),它将首先清除文档。这有明显的负面反响。
尽管用于JavaFX,人们已经报告了dtjava.js的成功,我完全有理由相信它是一个可行的选择。
但是,我团队中的其他利益相关者已经完成了有关deployJava.js的工作,并且不愿意丢弃这项工作,这意味着我需要坚持使用deployJava.js。只有一种方法可以做到这一点:确保在页面呈现期间调用deployJava,而不是通过Ajax,事件或其他延迟触发器。
最后,我们正在收集我们的信息,并将其传递到第二页,该页面将按预期呈现小程序。它工作正常,在大多数情况下,我们的客户端无论如何都会这样做(收集信息,传递服务器端,并获得重定向响应),因此强制解决问题是没有意义的。我们通过查询字符串传递信息,但您可以使用cookie和/或localstorage API,如果您希望window.location保持清晰外观。
感谢您的回复,即使他们在评论区。如果有人有更好的方法,其他回复仍然在船上拍摄!
答案 2 :(得分:3)
如果您正在使用jQuery并希望定位特定的dom元素,而不仅仅是追加:
function docWriteWrapper(jq, func) {
var oldwrite = document.write, content = '';
document.write = function(text) {
content += text;
}
func();
document.write = oldwrite;
jq.html(content);
}
docWriteWrapper($('#mydiv'), function () {
deployJava.runApplet(attributes, parameters, version);
});
答案 3 :(得分:1)
为了解决我在第316行下载和破解deployJava.js这个烦人的问题,用我自己替换了这行:
// document.write(n + "\n" + p + "\n" + r);
myDiv.append(n + "\n" + p + "\n" + r);
其中myDiv是在调用runApplet
之前设置为所需div的js全局变量:
myDiv = jQuery('#someDiv');
如果你找到一个不那么干扰的解决方案,请告诉我......