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

在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检测文件URI是否具有锚点或查询字符串

2如果是这样,创建一个临时文件File tmpfile = File.createTempFile("apphelp", ".html") ,并将元重定向到我想要的实际文件URI:

    

3使用新的临时URI执行local rundll命令:

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

我希望这适合你!

仅限Windows,您可以尝试

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

Windows上的解决方案是:

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

记住报价!!!

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

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

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

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

在Windows上,你总是有Internet Explorer,所以如果你真的不想自己找到iexplore.exe,你可以调用Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) – 但这不是总是工作。