2011-10-10 18 views
18

Questo suona come una domanda trivia, ma ho davvero bisogno di sapere.esecuzione di un file JavaScript direttamente dal browser

Se si mette l'URL di un file HTML nella barra degli indirizzi del browser, si renderà che HTML. Questo è l'intero scopo di un browser.

Se si dà un JPG o un file SWF, o anche PDF, che farà le cose giuste per questi tipi di dati.

Tuttavia, se si assegna l'URL di un file JavaScript, sarà visualizzare il testo di tale file. Quello che voglio è che il file venga eseguito direttamente.

Ora, so che se si utilizza il protocollo javascript:, si eseguirà la testo dell'URL, ma che non è quello che mi serve.

Potrei avere l'URL puntato su un file HTML costituito da un singolo tag <script> che a sua volta punta al file JavaScript, ma per ragioni occulte del mio, non posso farlo.

Se il file in http://example.com/file.js costituita interamente da

alert("it ran"); 

e ho messo l'URL nella barra degli indirizzi, che voglio "ha funzionato" a pop-up come un avviso.

Sono scettico sul fatto che sia possibile, ma spero contro ogni speranza che ci sia un'intestazione o un tipo MIME o qualcosa di simile che posso impostare e farlo miracolosamente.

+3

il problema è: in quale contesto verrà eseguito questo script? Il browser dovrebbe creare una pagina HTML vuota? – levu

+0

Abbastanza sicuro che questo non è possibile per il motivo che levu ha descritto –

+0

@Smamatti - 'x-'? Ha smesso di essere sperimentale [nel 2006] (http://www.rfc-editor.org/rfc/rfc4329.txt). Questo però non funzionerà. – Quentin

risposta

11

Questo non è possibile. Il browser non ha idea del contesto in cui deve essere eseguito JavaScript; ad esempio, quali sono le proprietà di window? Se si presume che possa venire fuori con alcune impostazioni predefinite casuali, per quanto riguarda il comportamento di document? Se qualcuno fa document.body.innerHTML = "foo" cosa dovrebbe succedere?

JavaScript, a differenza di immagini o pagine HTML, è dipendente da un contesto in cui viene eseguito. Quel contesto potrebbe essere una pagina HTML, o potrebbe essere un ambiente del server Node, o potrebbe addirittura essere Windows Scripting Host. Ma se hai appena navigare a un URL, il browser non ha idea di quale contesto si deve eseguire lo script in.


Per risolvere il problema, forse utilizzare about:blank come una pagina host.Quindi è possibile inserire lo script nel documento, dandogli il contesto di esecuzione del caso, incollando il seguente nella barra degli indirizzi:

javascript:(function() { var el = document.createElement("script"); el.src = "PUT_URL_HERE"; document.body.appendChild(el); })(); 
+1

Il problema del contesto non mi è mai venuto in mente. Il contesto che voglio è lo stesso che verrebbe fornito a una pagina HTML completamente vuota - ma c'è ovviamente un enorme divario tra ciò che * I * conosce e ciò che il browser conosce. La codifica – Malvolio

+2

ti rende umile @Malvolio :) –

2

Non direttamente, ma si potrebbe fare uno script lato server semplice, per esempio in PHP. Invece di

http://example.com/file.js 

, passare a:

http://localhost/execute_script.php?url=http://example.com/file.js 

Naturalmente, si potrebbe Smallen questo utilizzando RewriteRule in Apache, e/o l'aggiunta di un'altra voce nel file host che reindirizza a 127.0.0.1.

Nota che questo non è grande in termini di sicurezza, ma se lo si utilizza voi stessi e sapere cosa si sta scaricando, si dovrebbe andare bene.

<html> 
<head> 

    <script> 
    <? echo file_get_contents($_GET['url']); ?> 
    </script> 

</head> 

<body> 

</body> 
</html> 
0

è possibile scrivere il proprio browser utilizzando webkit qt/e farlo. quando l'utente inserisce un file js nella posizione url è possibile leggere quel file ed eseguire il javascript.

http://code.google.com/apis/v8/get_started.html è un altro canale. non sono sicuro se soddisfa la necessità.

+1

No, grazie. Ho il controllo sullo script e sul server, ma non sul browser. – Malvolio

0

Usa Node.js. Scaricare e installare node.js e creare un server http/s e annotare ciò che si desidera visualizzare nel browser. usa localhost :: portNumber sul server come url per eseguire il tuo file. fare riferimento al doc nodo js - https://nodejs.org/dist/latest-v7.x/docs/api/http.html

Run - http://localhost:3000

codice di esempio riportato di seguito:

var http = require("http"); 
    var server = http.createServer(function(req,res){ 
    res.writeHead(200,{'Content-Type':'text/html'}); 
     res.end("hello user"); 
    }); server.listen(3000);` 
Problemi correlati