2008-11-18 4 views
10

À partir d'un programme Java, j'ai besoin de lancer le navigateur par défaut sur un fichier HTML local, pointé vers une ancre à l'intérieur du fichier. Dans Java SE 6, la méthode java.awt.Desktop.browse ouvrira le fichier, mais n'honorera pas l'ancre, donc quelque chose comme le suivant ouvre le fichier en haut, mais ne fait pas de page du navigateur à l'ancre:Comment lancer une URL de protocole de fichier avec une ancre de Java?

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

Sun indique ici http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477862 que les ancres ne sont pas prises en charge dans le protocole URI de fichier.

Est-ce que quelqu'un a une meilleure réponse?

Je peux utiliser Java SE 6. Je serais OK avec une solution Windows uniquement.

Répondre

1

Pour Windows uniquement, vous pouvez essayer

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

Ceci affichera brièvement une fenêtre de console. – Joey

0

Vous pouvez essayer d'utiliser BrowserLauncher2. C'est une petite bibliothèque multiplate-forme autonome pour ouvrir le navigateur par défaut. Il gère parfaitement les ancres.

+0

Ne fonctionne pas pour moi dans Windows 7, l'ancre est dépouillée. Je pense que c'est un problème de système d'exploitation, ProcessMonitor montre mon appel à Firefox sans l'ancre. – glenneroo

+0

Bien que cela puisse être un indice précieux pour résoudre le problème, une bonne réponse démontre également la solution. S'il vous plaît [modifier] pour fournir un exemple de code pour montrer ce que vous voulez dire. Sinon, envisagez d'écrire ceci comme un commentaire à la place. –

1

Solution sous Windows est:

rundll32 "file: /// x: /temp/fragtest.htm#frag" url.dll, FileProtocolHandler

esprit les citations !!!

rundll32 URL.dll, fichier FileProtocolHandler: /// x: /temp/fragtest.htm#frag fonctionne comme prévu.

0

J'ai fait une enquête sur cet article here - notez que l'ouverture cmd et en tapant start file:///c:/temp/test.html#anchor ne fonctionne pas non plus.

Je pense que la seule chose qui fonctionne réellement est d'appeler un navigateur manuellement (ou utiliser un outil tiers qui fait cela).

Sur Windows, vous avez toujours Internet Explorer, vous pouvez donc appeler le Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) si vous ne voulez pas vraiment trouver iexplore.exe, mais cela ne fonctionne pas toujours.

3

Je viens de résoudre cela d'une autre manière, car aucune quantité de guillemets ou d'espaces dans aucun de ces exemples n'a fonctionné pour moi.

1 détecter si l'URI du fichier a une chaîne d'ancre ou de la requête

2 Si oui, créez un fichier temporaire File tmpfile = File.createTempFile("apphelp", ".html") avec un URI méta-rediriger vers le fichier réel que je désire:

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

3 Exécutez la commande rundll locale en utilisant un nouvel URI temporaire:

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

J'espère que cela fonctionne pour vous!

+0

Cela fonctionne également avec 'Desktop.browse()' - au moins sous Windows –

Questions connexes