12

从 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 的解决方案。

4

5 回答 5

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()+ "\"");

我希望这对你有用!

于 2012-11-07T20:11:51.793 回答
1

Windows 上的解决方案是:

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

注意引号!!!

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

于 2010-11-12T09:03:30.233 回答
0

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

于 2009-06-12T11:05:50.853 回答
0

仅适用于 Windows,您可以尝试

System.exec("cmd.exe start file:///C:/foo/bar.html#anchor")
于 2008-11-27T07:56:52.740 回答
0

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

我认为唯一真正有效的方法是手动调用浏览器(或使用第三方工具)。

在 Windows 上,你总是有 Internet Explorer,所以Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL)如果你真的不想自己找到 iexplore.exe,你可以打电话——但这也并不总是有效。

于 2012-02-08T19:10:23.183 回答