签名的Java Applet与客户端上运行的普通Java应用程序具有相同的安全许可.对于特定项目,我需要这些权限,并且我需要在JavaScript调用的情况下执行特权操作.
现在,问题是,至少对于Ubuntu(目标浏览器和平台)中的Firefox 3,当通过未签名的JavaScript调用applet方法时,它会丢失其特殊权限.由于签名JavaScript不是一个选项,我需要一种方法来解决这个限制.
实现此目的的一种方法是在applet启动时创建一个线程,并在主线程接收到JavaScript调用时调用该线程上的方法.我已经实现了这个想法的工作原型,但我发现它有点笨拙,因为它使用了太多的反射并且不像我想要的那样容易重复使用.
做我正在做的事情有一种共同的,标准的方式吗?而且,如果我的想法是正确的方法,你将如何以可重用的方式实现它?我想要实现的是一个框架,它允许这个"运行方法在特权线程"的东西被用于各种对象.理想的,utopic解决方案将是这样的:
// when the applet starts-up
PrivilegedExecuter priv = new PrivilegedExecuter(myObject); //or MyClass.class
// ...
// inside a JavaScript-called method (myObject has myMethod)
priv.myMethod(); // myMethod is run synchronously in a privileged thread
Run Code Online (Sandbox Code Playgroud) 我正试图在一个前面显示一个模态对话框Applet.
我当前的解决方案是这样获取根框架:
Frame getMyParent() {
Container parent = getParent();
while (!(parent instanceof Frame)) {
parent = ((Component)parent).getParent();
}
return (Frame)parent;
}
Run Code Online (Sandbox Code Playgroud)
并创建如下对话框:
public OptionsDialog(MainApplet applet, boolean modal) {
super(applet.getMyParent(), "options", modal);
// ....
Run Code Online (Sandbox Code Playgroud)
然而,通常这会显示框架下方的模态对话框,尽管模态行为可以正常工作.
怎么解决这个问题?
理想情况下,这应该适用于Java 1.5及更高版本.
我有一个JNLP applet,它运行在安装了32位和64位JVM的64位计算机上.JNLP必须在64位JVM上运行才能正确执行.有没有办法强制使用64位JVM?
我想将applet从div元素移动到另一个div元素而不重新加载它.我不想使用绝对定位.有没有办法做到这一点 ?
我试试这个,但它不起作用:
<html>
<head>
<script type="text/javascript">
function toDiv1() {
var appletElt = document.getElementById('myApplet');
document.getElementById('div1').appendChild(appletElt);
}
function toDiv2() {
var appletElt = document.getElementById('myApplet');
document.getElementById('div2').appendChild(appletElt);
}
</script>
</head>
<body>
<div id ="myApplet">
<applet width="200" height="200"
codebase="http://mainline.brynmawr.edu/Courses/cs110/spring2002/Applets/Smiley/"
code="Smiley.class"
name="Smiley">
</applet>
</div>
<div id="div1"></div>
<div id="div2"></div>
<div>
<button onclick="toDiv1()">toDiv1</button>
<button onclick="toDiv2()">toDiv2</button>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
你可以试试这个小提琴
@goldenparrot提出的解决方案outerHTML有效但不适用于所有浏览器(至少是Firefox ESR).
正如@kritzikratzi答案和@biziclop答案中所述,firefox上存在已知问题,重新加载iframe,flash对象,firefox中的插件.
我认为(但我不确定)唯一的解决方案是使用绝对定位(@cuzzea).但是,我问这个问题是因为我想找到另一种方式("我不想使用绝对定位").这就是我不会给出答案的原因.
谢谢你的贡献.
I have finished writing my applications, and would like to deploy it as a Java applet.
How can I start this ?
Additionally, how would you deploy it on html page, and pass an argument to the Java applet ?
我正在使用JNLP显示applet.我写了所有必要的文件.罐子签了名.即使applet加载正常.我在Java控制台中收到大量消息,导致applet加载延迟.
basic: JNLP2ClassLoader.findClass: pack.XMLDropDown$1: try again ..
basic: JNLP2ClassLoader.findClass: pack.XMLDropDown$2: try again ..
basic: JNLP2ClassLoader.findClass: pack.XMLDropDown$3: try again ..
basic: JNLP2ClassLoader.findClass: pack.XMLDropDown$4: try again ..
basic: JNLP2ClassLoader.findClass: pack.XMLComboBoxModel: try again ..
basic: JNLP2ClassLoader.findClass: pack.XMLToolTipManager: try ..
...so on.
Run Code Online (Sandbox Code Playgroud)
Java控制台中有很多消息.
PS.Applet工作正常.只是想知道再次尝试消息的原因.
假设我有以下简单的小程序.我想知道获取jar的http请求是由浏览器还是由jvm发出的.如果它是由jvm制作的,浏览器的cookie和会话是否发送到服务器?
<APPLET
CODE="FieldTestF.class"
WIDTH="100%" HEIGHT="90"
ARCHIVE = "FieldTestF.jar"
>
This example uses an applet.
</APPLET>
Run Code Online (Sandbox Code Playgroud) 我正在将控制台应用程序转换为使用Swing的控制台应用程序.目前我希望我的程序能够做到类似的事情,.nextInt();我怎么能通过使用.getText();或类似的东西来实现这一点?
简而言之;
如何保持程序的执行,直到用户在文本字段中输入内容并按下回车键.
我正在尝试使用globalsign颁发的代码签名证书签署一个jar文件.
我对此完全陌生,但经过一些谷歌搜索和大量的反复试验后,我执行了以下步骤.
我使用以下命令在我的密钥库中导入了证书:
keytool -importcert -alias signalias -file OS200912023195.cer
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下方式签署我的jar文件时:
jarsigner applet.jar signalias
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
jarsigner:找不到证书链:signalias.signalias必须引用包含私钥和相应公钥证书链的有效KeyStore密钥条目.
我忘记了证书的问题或存在问题吗?
我开发了一个小程序,我发现了一个奇怪的行为.
这适用于基于GWT,Hibernate和Spring构建的基于安全性的应用程序.
applet主要访问浏览器证书并使用它来加密和解密数据.
它在所有系统上工作正常但我不知道一台客户端机器我发现了一个奇怪的行为.
当我在Internet Explorer中登录时.小程序加载在以下点停止,然后自动关闭.
applet控制台错误说:
basic:添加进度监听器:sun.plugin.util.GrayBoxPainter$GrayBoxProgressListener@337d0f
basic:调用http://phil.etenders.in/securityApplet.jar 安全性的Plugin2ClassLoader.addURL父级:启用黑名单吊销检查安全性:启用可信库列表检查网络:找到缓存条目[url:http:// phil. etenders.in/securityApplet.jar,version:null ] prevalidated = false/0
删除了黑名单撤销检查和可信库检查,但没有任何影响.(他们经过的很好),
如果我从http://csis.pace.edu/~bergin/Java/applets.htm打开任何示例小程序, 它将在以下行停止
basic: Plugin2ClassLoader.isTrustedByPolicy called
basic: Plugin2ClassLoader.isTrustedByPolicy returns false
Run Code Online (Sandbox Code Playgroud)
所有三种浏览器的行为.
- Firefox和Chrome:根本不加载.
- IE:第一次加载时无法加载.
如果需要更多细节,请告诉我.请参考源代码来自这里.