首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用deployJava.runApplet定位特定元素

使用deployJava.runApplet定位特定元素
EN

Stack Overflow用户
提问于 2012-11-23 01:44:32
回答 4查看 6.9K关注 0票数 7

在成功地维护了使用好的旧版本的applet多年之后:

代码语言:javascript
复制
<script src="foo.js"></script> 

嵌入Java小程序的方法,我们无法遮住耳朵并唱“啦!”更多。

是时候使用了:

代码语言:javascript
复制
deployJava.runApplet()

当我使用单击处理程序(这里通过jQuery在按钮上使用事件侦听器,但这无关紧要)触发此方法时:

代码语言:javascript
复制
$('#button').click(function() {
  deployJava.runApplet(attributes, parameters, version);
});

...it清除了整个现有文档,并将其替换为小程序。我所需要知道的就是如何将特定的DOM元素作为applet的容器,这样我的页面就不会被擦除。

它似乎是我可以以target: someElement的形式传递的属性,其中"someElement“要么是DOM对象,要么是字符串形式的元素ID。但遗憾的是,我找不到关于这种属性的文档。

为了完整起见,下面是传递的内容:

代码语言:javascript
复制
/*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重建文档所需的一切,但我相信你们都可以很好地想象这种前景在我看来是多么可怕。

如果有任何建议,我们将非常感谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-13 18:13:26

作为Christophe Roussy解决方案的替代方案,您可以在运行deployJava.runApplet时覆盖document.write

如下所示:

代码语言:javascript
复制
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);
}

然后:

代码语言:javascript
复制
docWriteWrapper(function () {
    deployJava.runApplet(attributes, parameters, "1.6");
});

有点老生常谈,但工作起来很有魅力;)

票数 7
EN

Stack Overflow用户

发布于 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。

感谢你的回复,尽管他们是在评论区。如果有人有更好的方法,其他回复仍在接受中!

票数 4
EN

Stack Overflow用户

发布于 2013-05-02 05:44:33

如果您正在使用jQuery,并且想要针对特定的dom元素,而不仅仅是附加:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13517790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档