Ho trovato una soluzione che lo risolva. Abusa il fatto che dal browser, è possibile reindirizzare a un'altra pagina con parametri, anche se la pagina di destinazione è locale.
Invece di chiamare l'URL direttamente da Java, procedere come segue:
Creare un file HTML temporaneo. In questo file temporaneo stampa un codice HTML che reindirizzerà automaticamente il browser all'URL reale che desideri aprire. Esempio:
<meta http-equiv="refresh" content="0; url=file:///C:/work/my_page.html?message=helloWorld" />
Poi, basta lanciare il browser sul file temporaneo HTML, che immediatamente si reindirizzare alla URL reale :)
Ecco il codice Java per farlo in una riga:
String url = "file:///C:/work/my_page.html?";
String params = "message=HelloWorld";
Desktop.getDesktop().browse(new URI(createHtmlLauncher(url + params)));
procedimento createHtmlLauncher()
:
private String createHtmlLauncher(String targetUrl) throws Exception {
String launcherFile = System.getProperty("java.io.tmpdir") + "local_launcher.html";
File launcherTempFile = new File(launcherFile);
PrintWriter writer = null;
try {
writer = new PrintWriter(launcherTempFile, "UTF-8");
} catch (Exception e) {
throw new Exception("Error opening file for writing: " + launcherTempFile.getAbsolutePath() + " : " + e.getMessage());
}
writer.println("<meta http-equiv=\"refresh\" content=\"0; url=" + targetUrl + "\" />");
writer.close();
return "file:///" + launcherFile.replace("\\", "/");
}
Si noti che per evitare di riempire il disco con molti file temporanei, questo codice utilizza lo stesso file per il reindirizzamento ogni volta. Significa che se apri qualche pagina senza alcun ritardo, probabilmente avrai problemi di gara.
La soluzione è utilizzare invece un file temporaneo generato. Lo svantaggio di questo è che non puoi sapere quando rimuovere questi file dal disco. Se non li elimini e hai un uso estremo della funzionalità, il disco può essere pieno.
Solo una nota: quando aggiungo manualmente il parametro nella barra degli indirizzi del browser, accetta il parametro e posso stamparlo dal JS. Quindi forse è possibile farlo anche quando lo si avvia da un collegamento ipertestuale o da qualche API – SomethingSomething
Immagino ci sia un modo per risolverlo ... Ha funzionato con hyperlink - Ho creato un altro file locale nella stessa directory e ho usato 'click here ', ha funzionato. – SomethingSomething
Ho postato la mia soluzione qui sotto, credo che sia meno lavoro di avviare un server :) – SomethingSomething