2008-11-18 8 views
10

Von einem Java-Programm muss ich den Standardbrowser für eine lokale HTML-Datei starten, die auf einen Anker in der Datei verweist. In Java SE 6 wird die java.awt.Desktop.browse-Methode die Datei öffnen, aber den Anker nicht berücksichtigen. Daher wird die Datei oben wie folgt geöffnet, der Browser wird jedoch nicht an den Anker übergeben:Wie starte ich eine Dateiprotokoll-URL mit einem Anker aus Java?

Desktop.getDesktop("file:///C:/foo/bar.html#anchor"); 

Sun sagt hier http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477862, dass Anker im Datei-URI-Protokoll nicht unterstützt werden.

Hat jemand eine bessere Antwort?

Ich kann Java SE 6. Ich wäre in Ordnung mit einer Windows-Lösung. nur

Antwort

1

Für Windows, könnten Sie

System.exec("cmd.exe start file:///C:/foo/bar.html#anchor") 
+0

Dies zeigt kurz ein Konsolenfenster. – Joey

0

versuchen Sie versuchen BrowserLauncher2 verwenden könnte. Es ist eine kleine und in sich geschlossene plattformübergreifende Bibliothek zum Öffnen des Standardbrowsers. Es behandelt Anker perfekt.

+0

Funktioniert bei Windows 7 nicht, der Anker ist entfernt. Ich denke, es ist ein Problem mit dem Betriebssystem, ProcessMonitor zeigt meinen Aufruf zu Firefox ohne den Anker. – glenneroo

+0

Während dies ein wertvoller Hinweis zur Lösung des Problems sein könnte, zeigt eine gute Antwort auch die Lösung. Bitte [bearbeiten], um Beispielcode anzugeben, um zu zeigen, was Sie meinen. Alternativ können Sie dies auch als Kommentar schreiben. –

1

Lösung unter Windows ist:

rundll32 URL.DLL, FileProtocolHandler "file: /// x: /temp/fragtest.htm#frag"

Mind the quotes !!!

rundll32 URL.dll, DateiprotocolHandler file: /// x: /temp/fragtest.htm#frag funktioniert wie erwartet.

0

Ich habe einige Untersuchungen zu diesem Artikel here - beachten Sie, dass die Eröffnung cmd und Eingabe start file:///c:/temp/test.html#anchor auch nicht funktioniert.

Ich denke, das einzige, was tatsächlich funktioniert, ist einen Browser manuell aufzurufen (oder verwenden Sie ein Drittanbieter-Tool, das dies tut).

Unter Windows haben Sie immer den Internet Explorer, also können Sie Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) anrufen, wenn Sie iexplore.exe nicht selbst finden wollen - aber das funktioniert auch nicht immer.

3

Ich habe gerade diesen anderen Weg gelöst, weil keine Menge an Zitaten oder Leerzeichen in irgendeinem dieser Beispiele für mich funktionierte.

1 erkennen, ob die Datei URI einen Anker oder Query-String hat

2 Wenn ja, eine temporäre Datei File tmpfile = File.createTempFile("apphelp", ".html") mit einem erstellen Meta-Umleitung auf die eigentliche Datei URI Ich wünsche:

<html><head> 
<meta http-equiv="refresh" content="0;url=help.html#set_filter" /> 
</head></html> 

3 Führen Sie den lokalen rundll-Befehl mit dem neuen temporären URI aus:

Runtime.getRuntime().exec(
    "rundll32 url.dll,FileProtocolHandler \"" 
    +tmpfile.toURI().toString()+ "\""); 

Ich hoffe, das funktioniert für Sie!

+0

Dies funktioniert auch mit 'Desktop.browse()' - zumindest unter Windows –

Verwandte Themen