2016-02-22 8 views
5

Ho il seguente codice per l'apertura di una pagina web locale con un parametro:parametri vengono rimossi quando l'apertura di URL locale nel browser predefinito

String url = "file:///C:/work/my_page.html?"; 
String params = "message=HelloWorld"; 

Desktop.getDesktop().browse(new URI(url + params)); 

Ma, quando si apre il browser, la stringa di parametri (?message=HelloWorld) è rimosso.

Mentre quando chiamo una pagina con il prefisso http://, funziona.

Come posso farlo funzionare anche con il file locale? (cioè che inizia con file:///)

risposta

1

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.

2

Non è possibile. http: // è un protocollo che consente i parametri. file: // è un altro protocollo che non consente i parametri.

Suggerimento: creare un sito Web locale (ad esempio il molo) e utilizzare solo http potocol. A proposito, tutte le altre cose http come AJAX non funzioneranno neanche.

+0

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

+0

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

+0

Ho postato la mia soluzione qui sotto, credo che sia meno lavoro di avviare un server :) – SomethingSomething

Problemi correlati