Applet模式IE可以获取codeBase而Firefox不行
在将一个桌面程序以Applet形式发布时,往往因为资源文件的路径问题需要获取codeBase,然后从服务器端获取资源,在IE浏览器中,默认就可以通过以下语句获取到codeBase
Map<String, String> named = parameters.getNamed();
this.codebase = named.get("codeBase");
然而Firefox却不支持,没有办法在默认情况下获取到codeBase,所以就考虑通过传递参数codeBase进入Applet。
方案
通过JNLP将参数codeBase传入到Applet,IE中传入的参数会覆盖默认的codeBase的内容。此时上面的Java代码在IE和Firefox中就都可以获取codeBase了。
下面是JNLP和HTML的代码
Daks140UIDesign.jnlp代码
<?xml version="1.0" encoding="utf-8"?>
<jnlp spec="1.0" xmlns:jfx="http://javafx.com" href="Daks140UIDesign.jnlp">
<information>
<title>Daks140UIDesign</title>
<vendor>Alan</vendor>
<description>Daks140UIDesign</description>
<offline-allowed/>
</information>
<resources>
<jfx:javafx-runtime version="2.2+" href="http://javadl.sun.com/webapps/download/GetFile/javafx-latest/windows-i586/javafx2.jnlp"/>
</resources>
<resources>
<j2se version="1.6+" href="http://java.sun.com/products/autodl/j2se"/>
<jar href="Daks140UIDesign.jar" size="55632" download="eager" />
</resources>
<security>
<all-permissions/>
</security>
<applet-desc width="800" height="600" main-class="com.javafx.main.NoJavaFXFallback" name="Daks140UIDesign" >
<param name="requiredFXVersion" value="2.2+"/>
</applet-desc>
<jfx:javafx-desc width="800" height="600" main-class="daks140uidesign.Daks140UIDesign" name="Daks140UIDesign" >
<fx:param name="codeBase" value="http://localhost:8080/Daks140UIDesignSA/"/>
</jfx:javafx-desc>
<update check="always"/>
</jnlp>
对于JNLP,这里需要注意,如果在applet-desc中加入param是不起作用的,需要在jfx:javafx-desc里面添加fx:parm
HTML代码
<html>
<head>
<SCRIPT src="./web-files/dtjava.js"></SCRIPT>
<script>
function javafxEmbed() {
dtjava.embed(
{
url: 'Daks140UIDesign.jnlp',
placeholder: 'javafx-app-placeholder',
width: '100%',
height: '100%'
},
{
javafx: '2.2+'
},
{}
);
}
<!-- Embed FX application into web page once page is loaded -->
dtjava.addOnloadCallback(javafxEmbed);
</script>
</head>
<body>
<div id='javafx-app-placeholder'></div>
</body>
</html>
对于HTML,需要特别注意一点,通过Netbeans的JavaFX2工程产生的HTML中有一个jnlp_content属性,这个属性一定要删除,否则在JNLP文件中的任何修改都不会起作用
参考
http://stackoverflow.com/questions/15704637/passing-parameters-from-jnlp-to-javafx2