2011-10-10 19 views
18

Esto suena como una pregunta de trivia, pero realmente necesito saberlo.Ejecutar un archivo JavaScript directamente desde el navegador

Si coloca la URL de un archivo HTML en la barra de Ubicación de su navegador, procesará ese HTML. Ese es el propósito de un navegador.

Si le da un JPG, un archivo SWF o incluso PDF, hará las cosas correctas para esos tipos de datos.

Pero, si le da la URL de un archivo JavaScript, mostrará mostrar el texto de ese archivo. Lo que quiero es que ese archivo se ejecute directamente.

Ahora, sé que si se utiliza el protocolo javascript:, ejecutará el texto de la URL, pero eso no es lo que necesito.

Podría hacer que la URL apunte a un archivo HTML que consiste en una sola etiqueta <script> que a su vez apunta al archivo JavaScript, pero por razones ocultas, no puedo hacer eso.

Si el archivo en http://example.com/file.js consiste enteramente en

alert("it ran"); 

Y no lo tengo en el URL en la barra de ubicación, quiero "funcionó" para que aparezca como una alerta.

Soy escéptico de que esto sea posible, pero estoy esperando-contra-la esperanza de que hay un encabezado o un tipo MIME o algo así que puedo establecer y milagrosamente hacer que esto suceda.

+3

el problema es: ¿en qué contexto se ejecutará este script? ¿Debería el navegador crear una página HTML vacía? – levu

+0

Bastante seguro de que esto no es posible por la razón que levu describió –

+0

@Smamatti - 'x-'? Dejó de ser experimental [en 2006] (http://www.rfc-editor.org/rfc/rfc4329.txt). Eso no funcionará sin embargo. – Quentin

Respuesta

11

Esto no es posible. El navegador no tiene idea en qué contexto debe ejecutarse JavaScript; por ejemplo, ¿cuáles son las propiedades de window? Si supone que puede presentar algunos valores predeterminados aleatorios, ¿qué pasa con el comportamiento de document? Si alguien hace document.body.innerHTML = "foo", ¿qué debería pasar?

JavaScript, a diferencia de las imágenes o las páginas HTML, depende del contexto en el que se ejecuta. Ese contexto podría ser una página HTML, o podría ser un entorno de servidor Node, o incluso podría ser Windows Scripting Host. Pero si sólo navegar a una URL, el navegador tiene ni idea de qué contexto se debe ejecutar el script en.


Como solución, tal vez usar about:blank como una página de acogida.A continuación, puede insertar la secuencia de comandos en el documento, lo que le da el contexto de ejecución apropiada, pegando el siguiente en la barra de URL:

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

El problema del contexto nunca se me ocurrió. El contexto que quiero es el mismo que se proporcionaría a una página HTML completamente vacía, pero obviamente hay una gran brecha entre lo que * yo * sé y lo que sabe el navegador. La codificación – Malvolio

+2

te hace humilde @Malvolio :) –

2

No directamente, pero podría hacer una secuencia de comandos simple del lado del servidor, p. en PHP. En lugar de

http://example.com/file.js 

, vaya a:

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

Por supuesto, usted podría Smallen esto mediante el uso RewriteRule en Apache, y/o la adición de otra entrada en el archivo de hosts que redirige a 127.0.0.1.

Tenga en cuenta que esto no es genial en términos de seguridad, pero si lo usa usted mismo y sabe lo que está descargando, debería estar bien.

<html> 
<head> 

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

</head> 

<body> 

</body> 
</html> 
0

usted puede escribir su propio navegador WebKit utilizando qt/y hacer eso. cuando el usuario introduce un archivo js en la ubicación de la url puede leer ese archivo y ejecutar el javascript.

http://code.google.com/apis/v8/get_started.html es otro canal. no estoy seguro si cumple con su necesidad.

+1

No, gracias. Tengo control sobre el script y el servidor, pero no el navegador. – Malvolio

0

Use Node.js. Descargue e instale node.js y cree un servidor http/sy escriba lo que desea mostrar en el navegador. use localhost :: portNumber en el servidor como url para ejecutar su archivo. consulte doc nodo JS - https://nodejs.org/dist/latest-v7.x/docs/api/http.html

Run - http://localhost:3000

código de ejemplo siguiente:

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);` 
Cuestiones relacionadas