从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的解决方案。
答案 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)
,但这并不总是有效。