J'ai

<script type="text/javascript" src="http://doamin.com/js/whatever.js?ref=images"></script>

Notez le ref=images à la fin de l'url. Mes questions sont, comment puis-je obtenir la variable ref de l'url et l'utiliser dans ce même fichier js.

5
Pinkie 20 oct. 2011 à 07:06

8 réponses

Meilleure réponse

Si whatever.js est juste un fichier js, vous ne pouvez pas.

S'il s'agit simplement d'un uri de requête et en utilisant le script côté serveur pour sortir le contenu javascript, vous pouvez obtenir la variable à partir du paramètre get.

Si vous souhaitez passer la variable à tout.js, vous pouvez simplement définir la variable avant d'inclure whatever.js, puis utiliser la variable dans whatever.js.

<script type="text/javascript">
<!--// 
  ref = 'images';
//-->
</script>
2
xdazz 20 oct. 2011 à 03:21

Vous aurez besoin d'un code similaire au suivant. Cela obtient tout après le? et le sépare en un tableau clé / paires.

var GETDATA = new Array();

// Get the string that follows the "?" in the window's location.
var sGet = window.location.search;
if (sGet) // if has a value...
{
 // Drop the leading "?"
 sGet = sGet.substr(1);

 // Generate a string array of the name value pairs.
 // Each array element will have the form "foo=bar"
 var sNVPairs = sGet.split("&");

 // Now, for each name-value pair, we need to extract
 // the name and value.
 for (var i = 0; i < sNVPairs.length; i++)
 {
  // So, sNVPairs[i] contains the current element...
  // Split it at the equals sign.
  var sNV = sNVPairs[i].split("=");

  // Assign the pair to the GETDATA array.
  var sName = sNV[0];
  var sValue = sNV[1];
  GETDATA[sName] = sValue;
 }
}
-1
James Williams 20 oct. 2011 à 03:22

Juste au cas où cela serait utile à quiconque cherche quelque chose de similaire, voici un exemple d'une façon d'envoyer de plus grandes quantités de données à un script sans utiliser AJAX.

<script src="test.js" name="testjs">
{
  "here"    : "is",
  "another" : "way",
  "of"      : "passing",
  "larger"  : "amounts",
  "of"      : "data",
  "to"      : "a script"
}
</script>

Ensuite, dans votre script test.js externe, vous avez juste besoin des éléments suivants:

(function(){
  var script = document.scripts.namedItem('testjs'), obj, data;
  if ( script && (data = script.innerHTML) ) {
    if ( typeof JSON != 'undefined' ) {
      obj = JSON.parse(data);
    }
    else if ( typeof jQuery != 'undefined' ){
      obj = jQuery.parseJSON(data);
    }
    /// obj now contains the object representation of your data
    alert(obj);
  }
})();
0
Pebbl 20 sept. 2012 à 23:16

Je semble me souvenir qu'il y avait un moyen d'obtenir la balise de script appelante dans certains navigateurs, mais je ne trouve pas de référence.

La prochaine meilleure chose est de suivre quelque chose comme ceci: http://snipplr.com/view/354/

Vous pouvez rechercher la balise de script avec une source que vous aimez, puis extraire la chaîne. Soyez prudent! Si vous définissez cette valeur en fonction des entrées de l'utilisateur, votre utilisateur pourrait injecter une chaîne de requête que votre scanner pourrait mal interpréter, créant un risque. Le même type d'approche d'analyse d'URL paranoïaque utilisé pour la chaîne de requête régulière doit être utilisé pour cela.

0
Brian Nickel 20 oct. 2011 à 03:28

Je ne connais pas de moyen d'obtenir l'attribut src uniquement pour l'élément de script de blocs actuel. Mais vous pouvez obtenir tous les scripts sur la page, puis les analyser.

//untested
var scripts = $('script[src]');
//loop through scripts and somehow identify the one that is yours
for (var script in scripts) {
  if (myscript) {
    var refvalue = getRef($(script).attr('src'), 'ref');
  }
}

//gup the parameter
function getRef(url, name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( url );
  if( results == null )
    return "";
  else
    return results[1];
}

J'espère que cela suffit pour continuer

1
mrtsherman 20 oct. 2011 à 03:16

Pour simplifier l'idée de mrtsherman, il suffit de trouver le script avec le src correct (depuis whatever.js):

var whatever = $('script[src*=http://domain.com/js/whatever.js]')

if (whatever.length){
    var ref = whatever.attr('src').match(/\?ref=(.*)/)
    if (ref && ref[1]){
        ref = ref[1] // ref == 'images'
    }
}

mise à jour: puisque vous voulez simplement sortir quelque chose de PHP et l'utiliser dans votre script, vous avez une bien meilleure option:

<script id="whatever" src="http://domain.com/whatever.js" data-ref="images"></script>

Puis à partir de votre script (en supposant que jQuery> = 1.4):

var ref = $('#whatever').data('ref') // "images"

Il s'agit de la méthode standard et recommandée pour obtenir des données côté serveur dans vos scripts client.

Voir http://html5doctor.com/html5-custom-data-attributes/ et http://dev.w3.org/html5 /spec/elements.html#embedding-custom-non-visible-data

3
Ricardo Tomasi 20 oct. 2011 à 03:32

Votre problème ici est que vous ne pouvez pas obtenir la requête à partir de l'URL du script:

<script src="http://doamin.com/js/whatever.js?ref=images">
     //Want to get the query here, but you can't
</script>

Tu as dit:

I'm using php. ref depends on the generated php variable. I want to pass that variable to the js file. Server side is ok with me. I thought the best way to do it is to put it as a url variable at the end of the js file. But i don't know how to access it. Other methods are ok with me

Revenons à votre objectif, passer une variable php au script ... Pourquoi ne pas passer la variable php à la page php contenant le script? Obtenez-le ensuite à l'aide de scripts fournis par d'autres affiches ici. Votre URL vers la page PHP contenant le script:

http://domain.com/ThePHPPageContainingTheScript.php?ref=images

Ensuite, cette page contient le script:

<script src="http://doamin.com/js/whatever.js">
     //Get the query from window.location, it's possible!
</script>
0
dpp 20 oct. 2011 à 03:37

Essayez ceci http://jsfiddle.net/fnE6w/

$("script[src*='ref=']").each(function(){
    var src=$(this).attr("src");
    var start=src.indexOf("ref=");
    var end=-1;


    if(start>0)
        end = src.indexOf("&",start+4);
    if(end==-1) end=src.length-1;    
    alert(src.substring(start+4,end));

});
1
Birey 20 oct. 2011 à 03:30
7830669