Как запустить URL-адрес файла протокола с якорем из Java?
Из программы 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.
Ответы
Ответ 1
Я просто решил это другим способом, потому что никакое количество цитат или пробелов в любом из этих примеров не работало для меня.
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 Выполните команду local rundll с помощью нового временного URI:
Runtime.getRuntime().exec(
"rundll32 url.dll,FileProtocolHandler \""
+tmpfile.toURI().toString()+ "\"");
Надеюсь, это сработает для вас!
Ответ 2
Только для Windows вы можете попробовать
System.exec("cmd.exe start file:///C:/foo/bar.html#anchor")
Ответ 3
Решение для Windows:
rundll32 URL.dll, FileProtocolHandler "файл:///x:/temp/fragtest.htm#frag"
Обратите внимание на цитаты!!!
rundll32 URL.dll, файл FileProtocolHandler:///x:/temp/fragtest.htm#frag работает должным образом.
Ответ 4
Вы можете попробовать использовать BrowserLauncher2. Это небольшая и автономная кросс-платформенная библиотека для открытия браузера по умолчанию. Он отлично справляется с якорями.
Ответ 5
Я провел некоторое исследование этого элемента здесь - обратите внимание, что открытие cmd
и ввод start file:///c:/temp/test.html#anchor
также не работает.
Я думаю, что единственное, что на самом деле работает, - это вызвать браузер вручную (или использовать сторонний инструмент, который это делает).
В Windows у вас всегда есть Internet Explorer, поэтому вы можете вызвать Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL)
, если вы действительно не хотите искать iexplore.exe самостоятельно, но это не всегда работает.