在成功地维护了使用好的旧版本的applet多年之后:
<script src="foo.js"></script> 嵌入Java小程序的方法,我们无法遮住耳朵并唱“啦!”更多。
是时候使用了:
deployJava.runApplet()当我使用单击处理程序(这里通过jQuery在按钮上使用事件侦听器,但这无关紧要)触发此方法时:
$('#button').click(function() {
deployJava.runApplet(attributes, parameters, version);
});...it清除了整个现有文档,并将其替换为小程序。我所需要知道的就是如何将特定的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重建文档所需的一切,但我相信你们都可以很好地想象这种前景在我看来是多么可怕。
如果有任何建议,我们将非常感谢。
发布于 2013-04-13 18:13:26
作为Christophe Roussy解决方案的替代方案,您可以在运行deployJava.runApplet时覆盖document.write。
如下所示:
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");
});有点老生常谈,但工作起来很有魅力;)
发布于 2012-11-23 23:41:19
所以问题的核心是: deployJava.js使用document.write。如果您在页面呈现之后使用此方法(而不是作为初始页面呈现的一部分),它将首先清除文档。它有明显的负面影响。
尽管dtjava.js的目标是JavaFX,但人们已经报告了它的成功,我有充分的理由相信它是一个可行的替代方案。
然而,我团队中的其他利益相关者已经围绕deployJava.js做了工作,并且不愿意放弃这些工作,这意味着我需要坚持使用deployJava.js。只有一种方法可以做到这一点:确保在页面呈现期间调用deployJava,而不是通过Ajax、事件或其他延迟触发器。
最后,我们收集信息,并将其传递到第二个页面,该页面将按预期呈现applet。它是有效的,而且在大多数情况下,我们的客户端无论如何都会这样做(收集信息,在服务器端传递信息,并获得重定向响应),因此没有必要强制执行该问题。我们通过查询字符串传递信息,但是如果你想让window.location看起来更整洁,你可以使用cookie和/或localstorage API。
感谢你的回复,尽管他们是在评论区。如果有人有更好的方法,其他回复仍在接受中!
发布于 2013-05-02 05:44:33
如果您正在使用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);
});https://stackoverflow.com/questions/13517790
复制相似问题