im Rahmen einer Umstellung von Applet zu Webstart bin ich auf ein Problem gestoßen:
Safari (unter OSX getestet), Chrome (Win7) und Firefox (Win7) wollen beim Klick auf einen JNLP-Link die JNLP-File erstmal runterladen.
Safari macht das Neuerdings wohl stillschweigend. Man sieht nicht direkt dass da die JNLP File runtergeladen wird. Der Benutzer muss das “wissen” und die JNLP File im Download-Bereich finden und doppelt klicken um Webstart zu starten.
Chrome lädt die File einfach runter. Hier sieht man wenigstens dass etwas heruntergeladen wurde. Aber auch hier kein automatischer Start der Webstartanwendung.
Firefox zeigt ein Fenster an und bietet immerhin an die File mit Java Webstart zu öffnen.
Der IE blendet ganz kurz eine Download-Bar ein, startet dann aber von alleine die Webstart-Anwendung.
Gibt es irgendwelche Tricks (Javascript, …???) wie ich die einzelnen Browser und Betriebssysteme dazu bringen kann Webstart mit dem einen, initialen Klick auszuführen?
Auf Kundensystemen ist es ein NoGo erst noch den Browser für Webstart “konfigurieren” zu müssen dass das “mit einem klick” läuft. Es reicht wenn die Admins Java installieren müssen.
Ich habe von Webstart leider keine Ahnung, aber mal ins blaue geraten:
Wie genau bietest du die Datei an? Mit dem “Content-Disposition”-Header kann man dem Browser sagen ob er eine Datei herunterladen oder öffnen soll. Wäre ich in PHP würde ich sowas wie
<html>
<head>
<title>Standalone - Installation und Start</title>
<SCRIPT LANGUAGE="JavaScript">
var javawsInstalled = 0;
var javaws12Installed = 0;
var javaws142Installed=0;
isIE = "false";
if (navigator.mimeTypes && navigator.mimeTypes.length) {
x = navigator.mimeTypes['application/x-java-jnlp-file'];
if (x) {
javawsInstalled = 1;
javaws12Installed=1;
javaws142Installed=1;
}
}
else {
isIE = "true";
}
</SCRIPT>
<SCRIPT LANGUAGE="VBScript">
on error resume next
If isIE = "true" Then
If Not(IsObject(CreateObject("JavaWebStart.isInstalled"))) Then
javawsInstalled = 0
Else
javawsInstalled = 1
End If
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.2"))) Then
javaws12Installed = 0
Else
javaws12Installed = 1
End If
If Not(IsObject(CreateObject("JavaWebStart.isInstalled.1.4.2.0"))) Then
javaws142Installed = 0
Else
javaws142Installed = 1
End If
End If
</SCRIPT>
</head>
........
<a href="servlet/mywebstart.jnlp">
<img src="pics/login5.gif" alt="hier klicken zum Starten" width="133" height="33" border="0">
</a>
.......
Werde mal schauen dass ich mich zu “Content-Disposition: inline” etwas einlese…
@TO
Statt dieses Custom-Scripts solltest du lieber das von Sun/Oracle bereitgestellte Script nutzen, findest du auch in der Doc. @Fancy
Davon ausgehend das der IE genau das macht was er soll, nämlich das JNLP in TEMP laden und mit javaws.exe ausführen, zeigt das der Webserver scheinbar den richtigen Header liefert, sonst würde auch der IE nur einen Download draus machen da vom Server default-mäßig entweder text/plain oder application/octet-stream kommen sollte.