如何使用Java锚点启动文件协议URL?

时间:2008-11-18 23:12:59

标签: java file uri anchor file-uri

从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 个答案:

答案 0 :(得分:3)

我刚刚用另一种方式解决了这个问题,因为这些例子中没有任何引用或空格对我有用。

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使用新的临时URI执行本地rundll命令:

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

我希望这适合你!

答案 1 :(得分:1)

仅限Windows,您可以尝试

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

答案 2 :(得分:1)

Windows上的解决方案是:

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

记住报价!!!

rundll32 URL.dll,FileProtocolHandler file:/// x:/temp/fragtest.htm#frag按预期工作。

答案 3 :(得分:0)

您可以尝试使用BrowserLauncher2。它是一个小型且独立的跨平台库,用于打开默认浏览器。它完美地处理锚点。

答案 4 :(得分:0)

我对此项here进行了一些调查 - 请注意,打开cmd并输入start file:///c:/temp/test.html#anchor也不起作用。

我认为唯一可行的方法是手动调用浏览器(或使用执行此操作的第三方工具)。

在Windows上,您总是拥有Internet Explorer,因此如果您真的不想自己找到iexplore.exe,可以调用Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL),但这并不总是有效。