2010-08-26 16 views
9

En javascript, como un script cargado desde el servidor somer, ¿hay alguna manera de saber de qué servidor/host me cargué? Necesito hacer solicitudes de ajax adicionales a ese host y preferiría averiguar el host de forma dinámica.En Javascript, ¿hay alguna manera de saber de qué script de host se cargó?

Así que si usted incluye un archivo JavaScript en una página

<script src="http://somehost.com/js/test.js"></script> 

cuando esa Javascript ejecutar, dentro de Test.js ...

var host_loaded_from = ??? // should be somehost.com 

Gracias

+0

+1 buena pregunta, interesados ​​en ver si es posible el uso de JS – Mikey1980

Respuesta

11

¿hay alguna manera de saber qué servidor/host I se cargó?

sí, es posible excepto cuando el script se carga de forma asíncrona mediante deferasync o atributos desde la última secuencia de comandos en el DOM puede no ser necesariamente la secuencia de comandos que se está ejecutando en ese caso. Vea los comentarios de @kangax para más información.

Además, este same question se ha publicado recientemente.

Dentro de su test.js, obtenga el último elemento de script que será el script actualmente analizado (test.js en su caso), y obtenga su src.

// test.js 
var scripts = document.getElementsByTagName('script'); 
var src = scripts[scripts.length - 1].src; 

Uno la src se encuentra, analizado el host usando expresiones regulares.

src.match(new RegExp('https?://[^/]*')) 
["http://somehost.com"] // for your example 
+0

último elemento del guión no es necesariamente el que actualmente se está ejecutando, aunque (piense en los atributos "diferir" y "asincrónico"), por lo que este enfoque no es confiable. – kangax

+0

@kangax - ¿es correcto decir que lo anterior funcionará con la excepción de cuando se usan los atributos 'defer' o' async'? – Anurag

+2

Sí, eso creo. La especificación HTML5 actual, que en su mayoría debe reflejar el comportamiento real de los navegadores, dice: "Si ninguno de los atributos está presente (es decir," aplazar "y" asíncrono "), el script se busca y ejecuta inmediatamente antes de que el agente usuario continúe. analizando la página ". Por lo tanto, el script actualmente ejecutado debería ser el último elemento del script en el documento (ya que el análisis no puede continuar hasta que finalice la ejecución). – kangax

0

No, lo siento.

Si el <script> tenía una identificación, entonces tal vez. Pero realmente no puedes confiar en eso.

0

No estoy seguro si eso se puede hacer con JavaScript. Si el script está dentro de un archivo PHP hacerlo de esta manera:

... 
var host_loaded_from = <?php echo $_SERVER[SERVER_NAME] ?> 
... 

En mi sitio incluyo mis scripts JS usando PHP sólo por esa razón. Estoy interesado en ver si hay una mejor manera.

0

Debido a la misma política de origen, puede realizar solicitudes AJAX solo al origen (host + protocolo + puerto), se cargó la página HTML (documento), que no es necesariamente el mismo que el origen que se cargó su js de.

Puede usar window.location.hostname o document.location.hostname para conocer el nombre de host del documento.

+0

Recuerde que aunque las llamadas de Ajax son limitadas, un script de Javascript PUEDE cargar scripts, datos (usando JSONP), imágenes, etc. adicionales desde cualquier dominio. La misma política de origen se trata de llamadas directas de Ajax. –

+1

@Larry: Sí, pero el OP preguntaba específicamente sobre las llamadas Ajax. (JSONP no es Ajax). –

0

¿El script conoce su propio nombre de archivo? ("test.js" en la pregunta OP.)

Si es así, su script podría consultar el dom para todas las etiquetas de scripts, buscando las que tengan un atributo src. Pero necesitaría tener en cuenta dos scripts con el mismo nombre de archivo cargado desde diferentes servidores.Por ejemplo

<script src="http://somehost.com/js/test.js"></script> 
<script src="http://somehost_number2.com/js/test.js"></script> 

Aquí está JS que busca todas las etiquetas script en un EL:

var scripts = el.getElementsByTagName('SCRIPT'); 
Cuestiones relacionadas