How to launch a file protocol URL with an anchor from Java?

前端 未结 5 1086
深忆病人
深忆病人 2021-01-04 09:08

From a Java program, I need to launch the default browser on a local HTML file, pointed to an anchor inside the file. In Java SE 6, the java.awt.Desktop.browse method will

相关标签:
5条回答
  • 2021-01-04 09:24

    For Windows only, you could try

    System.exec("cmd.exe start file:///C:/foo/bar.html#anchor")
    
    0 讨论(0)
  • 2021-01-04 09:30

    I just solved this another way, because no amount of quoting or spaces in any of these examples worked for me.

    1 Detect if the file URI has a anchor or query string

    2 If so, create a temp file File tmpfile = File.createTempFile("apphelp", ".html") with a meta-redirect to the actual file URI I desire:

    <html><head>
    <meta http-equiv="refresh" content="0;url=help.html#set_filter" />
    </head></html>
    

    3 Execute the local rundll command using new temporary URI:

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

    I hope this works for you!

    0 讨论(0)
  • 2021-01-04 09:30

    Solution on Windows is:

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

    Mind the quotes!!!

    rundll32 URL.dll, FileProtocolHandler file:///x:/temp/fragtest.htm#frag does work as expected.

    0 讨论(0)
  • 2021-01-04 09:38

    You could try using BrowserLauncher2. It's a small and self-contained cross-platform library to open the default browser. It handles anchors perfectly.

    0 讨论(0)
  • 2021-01-04 09:48

    I've done some investigation on this item here - note that opening cmd and typing start file:///c:/temp/test.html#anchor also doesn't work.

    I think the only thing that actually works is to call a browser manually (or use a third-party tool that does this).

    On Windows, you always have Internet Explorer, so you could call Runtime.getRuntime().exec("cmd.exe start iexplore " + myURL) if you really don't want to find iexplore.exe yourself - but this doesn't always work either.

    0 讨论(0)
提交回复
热议问题