2008-11-18 4 views
10

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

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

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

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

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

ответ

1

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

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

На короткое время отобразится окно консоли. – Joey 2016-03-29 07:51:05

0

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

+0

Не работает для меня в Windows 7, якорь лишен. Я думаю, что это проблема ОС, ProcessMonitor показывает мой вызов Firefox без привязки. – glenneroo 2017-06-21 12:02:49

+0

Хотя это может быть ценным советом для решения проблемы, хороший ответ также демонстрирует решение. Пожалуйста, [править], чтобы предоставить пример кода, чтобы показать, что вы имеете в виду. В качестве альтернативы подумайте о том, чтобы вместо этого писать это как комментарий. – 2017-06-21 12:11:41

1

Решение на окнах:

rundll32 Url.dll, "Файл: /// х: /temp/fragtest.htm#frag" FileProtocolHandler

Ум цитаты !!!

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

0

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

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

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

3

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

1 Detect, если файл 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()+ "\""); 

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

Смежные вопросы