java - 如何在 Java 中使用#anchor 启动 URL?

标签 java url

我在 Java 中使用以下代码启动一个 URL:

Runtime.getRuntime().exec("rundll32 url.dll, FileProtocolHandler " + myURL)

这里我的URL是“file:///C:/Desktop/test.html#bottom

当我像这样传递 URL 时,它只执行“file:///C:/Desktop/test.html

它不包括#bottom

如何在 Java 中正确启动此 URL?

最佳答案

另一种方法(来自 How to launch a file protocol URL with an anchor from Java? ):

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

更新:

Yet another link with this issue (使用 url.dll)显示作者恢复尝试外部程序,在本例中为 Quero : Runtime.getRuntime().exec("cmd.exe qlaunch.exe open=\"file:///c:/temp/test.html?p=1\"");

据我所知,这是 Windows 和/或 Internet Explorer 中的一个错误。 Firefox has other issues使用必须手动禁用的 file:// 协议(protocol)。


更新 2:

这绝对是预期的行为或 Windows 本身的错误。使用 Desktop.browse ( which sends the URI clean to ShellExecute ) 或 cmd.exe startRuntime.getRuntime().exec("rundll32 url.dll "+ uri) 甚至只是打开命令提示符并键入 file:// URI 本身最终都会执行此操作(这是我通过 Process Monitor 发现的):

Process Monitor screenshot

显示的操作顺序:

  1. (第一个框)线程创建 = 当我在上面的 cmd 窗口中按回车键时
  2. 通过遍历目录树查找文件(例如进入 c:,进入 temp)
  3. (第二个框)找到该文件后,停止查找(这意味着 Windows 解析了 #? 字符)
  4. (第 3 个框)完成查找(关闭父文件夹上的文件,随后不再有磁盘 I/O)
  5. (第 4 个框)既然文件已找到,请查看打开的 .htm 文件(例如您的浏览器)
  6. 奇怪的是,后来它发现 Chrome(默认浏览器)但运行 IE(?!),然后运行 Chrome - 这可能是问题的主要部分。

请注意,调用 start iexplore file:///c:/temp/test.html#mark 确实 有效,因为它只是传递参数而没有尝试做任何事情特别。

请注意,第 2 步和第 3 步违反了 Microsoft 自 2006 年以来的建议 (see here),但据我所知,此行为是在 IE7 发布时引入的。我的猜测是,这修复了 Windows 中的一些错误或安全漏洞,但代价是无法做到这一点。

经过更多研究,Windows 中的 file: URI 似乎有一个 very sordid past

奇怪的是,一个Microsoft article from 2010file://host/path/file.txt?Query#fragment 显示为 .Net 中的有效 URI...

我认为在有人找到神奇的注册表设置之前你可能会倒霉 - 或者你可以手动调用浏览器(例如 Runtime.getRuntime().exec(chromepath + "chrome.exe file:///c:/temp/test.html#jump")Runtime.getRuntime().exec(iepath + "iexplore.exe file:///c:/temp/test.html#jump"))

或者,为了好玩:Runtime.getRuntime().exec("cmd.exe start iexplore "+ myURL)

关于java - 如何在 Java 中使用#anchor 启动 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187454/

相关文章:

java - Java中的事件通知

java - Crc32c(长)值的 Base64 编码

cocoa 友好的 URL

Java HTTP 响应代码、URL、IOException

ios - 使用 AlertController 强制更新应用程序

java.lang.ClassCastException : oracle. sql.ARRAY 无法转换为 oracle.sql.ARRAY

java - 如何在 Log4j 的静态方法中实例化记录器(对于大型项目)?

java - 创建具有特定范围的 java.net.Authenticator

javascript - 获取浏览器中打开的所有URL

php - #!在 url 中使网页行为奇怪