2008-11-18 14 views
10

Desde un programa Java, necesito iniciar el navegador predeterminado en un archivo HTML local, señalando un ancla dentro del archivo. En Java SE 6, el método java.awt.Desktop.browse abrirá el archivo, pero no respetará el delimitador, por lo que algo como lo siguiente abre el archivo en la parte superior, pero no abre el navegador al ancla:¿Cómo iniciar un URL de protocolo de archivo con un ancla de Java?

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

Sun dice aquí http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477862 que los anclajes no son compatibles con el protocolo de URI de archivo.

¿Alguien tiene una mejor respuesta?

Puedo usar Java SE 6. Estaría bien con una solución de Windows solamente.

Respuesta

1

Sólo para Windows, podría intentar

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

Esto mostrará brevemente una ventana de consola. – Joey

0

Usted podría tratar de usar BrowserLauncher2. Es una biblioteca multiplataforma pequeña e independiente para abrir el navegador predeterminado. Maneja perfectamente los anclajes.

+0

No funciona para mí en Windows 7, se quita el anclaje. Creo que es un problema de sistema operativo, ProcessMonitor muestra mi llamada a Firefox sin el ancla. – glenneroo

+0

Si bien esto podría ser una pista valiosa para resolver el problema, una buena respuesta también demuestra la solución. Por favor [edite] para proporcionar un código de ejemplo para mostrar lo que quiere decir. Alternativamente, considere escribir esto como un comentario en su lugar. –

1

solución en Windows es: "file: /// X: /temp/fragtest.htm#frag"

rundll32 URL.DLL, FileProtocolHandler

mente las cotizaciones !!!

rundll32 URL.dll, FileProtocolHandler file: /// x: /temp/fragtest.htm#frag funciona como se esperaba.

0

He hecho una investigación sobre este artículo here - tenga en cuenta que abrir cmd y escribir start file:///c:/temp/test.html#anchor tampoco funciona.

Creo que lo único que realmente funciona es llamar manualmente un navegador (o utilizar una herramienta de terceros que hace esto).

En Windows, siempre tiene Internet Explorer, por lo que puede llamar al Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) si realmente no desea encontrar iexplore.exe, pero esto tampoco siempre funciona.

3

Acabo de resolver esto de otra manera, porque ninguna cantidad de citas o espacios en ninguno de estos ejemplos funcionó para mí.

1 Detectar si el archivo URI tiene un ancla o cadena de consulta

2 Si es así, crear un archivo temporal File tmpfile = File.createTempFile("apphelp", ".html") con un meta-redirigir al archivo real URI deseo:

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

3 Ejecute el comando local rundll usando el nuevo URI temporal:

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

Espero que esto funcione para usted!

+0

Esto también funciona con 'Desktop.browse()' - al menos en Windows –

Cuestiones relacionadas