Как запустить URL протокола файла с якорем из Java? - PullRequest
11 голосов
/ 19 ноября 2008

Из программы Java мне нужно запустить браузер по умолчанию для локального файла HTML, указывающего на привязку внутри файла. В Java SE 6 метод java.awt.Desktop.browse открывает файл, но не поддерживает привязку, поэтому что-то вроде следующего открывает файл вверху, но не отображает браузер на привязке: *

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

Здесь Sun говорит http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6477862, что якоря не поддерживаются в протоколе URI файла.

У кого-нибудь есть лучший ответ?

Я могу использовать Java SE 6. Я бы согласился с решением только для Windows.

Ответы [ 5 ]

3 голосов
/ 08 ноября 2012

Я просто решил это по-другому, потому что никакие цитаты или пробелы ни в одном из этих примеров не работали для меня.

1 Определить, есть ли в URI файла привязка или строка запроса

2 Если это так, создайте временный файл File tmpfile = File.createTempFile("apphelp", ".html") с мета-перенаправлением на фактический URI файла:

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

3 Выполнить локальную команду rundll, используя новый временный URI:

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

Я надеюсь, что это работает для вас!

1 голос
/ 12 ноября 2010

Решение для Windows:

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

Следите за цитатами !!!

rundll32 URL.dll, файл FileProtocolHandler: /// x: /temp/fragtest.htm#frag работает должным образом.

1 голос
/ 27 ноября 2008

Только для Windows, вы можете попробовать

System.exec("cmd.exe start file:///C:/foo/bar.html#anchor")
0 голосов
/ 08 февраля 2012

Я провел некоторое исследование по этому пункту здесь - обратите внимание, что открытие cmd и ввод start file:///c:/temp/test.html#anchor также не работает.

Я думаю, что единственное, что действительно работает, это вызвать браузер вручную (или использовать сторонний инструмент, который делает это).

В Windows у вас всегда есть Internet Explorer, поэтому вы можете позвонить Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL), если вы действительно не хотите найти iexplore.exe самостоятельно - но это тоже не всегда работает.

0 голосов
/ 12 июня 2009

Вы можете попробовать использовать BrowserLauncher2 . Это небольшая автономная кроссплатформенная библиотека для открытия браузера по умолчанию. Отлично справляется с якорями.

...