2011-01-17 9 views
20

añado mi archivo Javsacript en páginas con diferentes cadenas de consulta en la ruta del script como este:¿Cómo obtengo el valor de cadena de consulta de la ruta del script?

Página1:

<script type="text/javascript" src="file.js?abc=123"></script> 

Página2:

<script type="text/javascript" src="file.js?abc=456"></script> 

Page3:

<script type="text/javascript" src="file.js?abc=789"></script> 

En mi archivo Javascript, ¿cómo puedo obtener el valor de " abc "param? Intenté usar window.location para esto, pero eso no funciona.

En caso de que ayuda, a continuación es una función que utilizo para encontrar el valor de un parámetro de cadena de consulta:

function getQuerystring(key, defaultValue) { 
    if (defaultValue == null) defaultValue = ""; 
    key = key.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]"); 
    var regex = new RegExp("[\\?&]" + key + "=([^&#]*)"); 
    var qs = regex.exec(window.location.href); 
    if (qs == null) 
     return defaultValue; 
    else 
     return qs[1]; 
} 
+0

posible duplicado de [¿Cómo puede obtener el nombre de archivo de secuencia de comandos desde dentro de ese guión?] (Http://stackoverflow.com/questions/710957/how-might-i-get-the-script-filename- from-within-that-script) – Bergi

Respuesta

24

Esto es posible. Ver Passing JavaScript arguments via the src attribute. El remate es que desde scripts en HTML (no XHTML) se ejecutan como cargado, esto permitirá que una secuencia de comandos para encontrar en sí, ya que siempre es el último guión de la página cuando es triggered-

var scripts = document.getElementsByTagName('script'); 
var index = scripts.length - 1; 
var myScript = scripts[index]; 
// myScript now contains our script object 
var queryString = myScript.src.replace(/^[^\?]+\??/,''); 

A continuación, solo aplica el análisis de cadena de consulta.

+10

* "... ya que los scripts en HTML (no XHTML) se ejecutan como cargados ..." * Tenga en cuenta que ['defer' y' async'] (http://www.w3.org/TR/html5/ scripting-1.html # attr-script-defer) los atributos modifican ese comportamiento, por lo tanto, si los está usando, es posible que esto no funcione: es posible que su script no sea el último de la serie en ese momento. Confiar en eso me daría escalofríos de todos modos, así que probablemente use el nombre de archivo y filtro en 'src' (se concede que introduce una restricción de que el archivo no puede renombrarse). –

+1

Filtrar en src puede ser complicado si hace referencia al mismo script varias veces con diferentes params. – bendytree

+4

Puede usar 'document.currentScript', que es la etiqueta de script real que ejecuta el código real. – MichelMattos

9

En primer lugar, la respuesta técnica: si asigna la etiqueta script de una identificación, a continuación, puede tomar su src y luego analizar la cadena de consulta.

<script id="whatever" type="text/javascript" src="file.js?abc=123"></script> 

 

var path = document.getElementById('whatever').src; 
// ... 

Con eso respondió, me gustaría expresar mi preocupación — esto huele a decisiones de diseño pobres. ¿Por qué estás incluyendo tu script de esta manera (con una querystring)? Si está tratando de optimizar su sitio (teniendo un script grande que se puede almacenar en caché para páginas subsiguientes), esta aproximación es realmente contraproducente porque los navegadores realizarán una nueva solicitud del archivo de script en cada página debido a la cadena de consulta diferente. El enfoque correcto es tener un gran archivo compartido y luego un pequeño archivo específico de la página en cada página.

+3

Josh3736 - una de las razones (y esta es la razón por la que terminé aquí mediante una búsqueda en Google) es manejar un widget que se está utilizando en otro lugar. Por ejemplo, estoy haciendo

  • 11. ¿Cómo obtengo el valor en tiempo real del comando 'tiempo'?
  • 12. Añadir cadena de consulta como diccionario de valor de ruta a ActionLink
  • 13. Ruta del script actual de Extendscript
  • 14. ¿Cómo obtengo el valor de MemberInfo?
  • 15. Acceso a la ruta del script JMeter
  • 16. Determinar la ruta del script BASH ejecutar
  • 17. Cambiar sola consulta URL valor de cadena
  • 18. ¿Cómo obtengo la ruta del tema drupal actual?
  • 19. Después de enlazar simbólicamente un archivo, ¿cómo obtengo la ruta del archivo original en Ruby?
  • 20. Cómo codificar una cadena de consulta para que sea el valor de otra cadena de consulta en javascript?
  • 21. ¿cómo modifico la variable de ruta del sistema en el script de Python?
  • 22. ¿Cómo obtener la ruta del script en R?
  • 23. Consulta del registro de base de datos para el valor de cadena coincidente casi similar
  • 24. ¿Cómo obtengo el índice de un objeto en un NSArray usando el valor de cadena?
  • 25. ¿Cómo puedo probar la resolución de ruta/acción de URL con cadena de consulta?
  • 26. PHP - ¿Cómo obtengo un valor de parámetro de $ _SERVER ['HTTP_REFERER']?
  • 27. Cómo obtener el valor entero del día de la semana
  • 28. ¿Cómo obtener la ruta del script por lotes en Windows?
  • 29. ¿Cómo obtengo el ícono de la Mac del usuario?
  • 30. Dado un tipo ExpressionType.MemberAccess, ¿cómo obtengo el valor del campo?