JavaScript url变量

JavaScript url变量,javascript,jquery,url,variables,Javascript,Jquery,Url,Variables,我有 注意url末尾的ref=images。我的问题是,如何从url获取ref变量并在同一个js文件中使用它 如果whater.js只是一个js文件,那么就不能 如果它只是一个请求uri,并使用服务器端脚本输出javascript内容,则可以从get参数获取变量 如果要将变量传递给whatever.js,只需在includewhater.js之前定义变量,然后在whater.js中使用变量即可 <script type="text/javascript" src="http://doa

我有



注意url末尾的
ref=images
。我的问题是,如何从url获取ref变量并在同一个js文件中使用它

如果
whater.js
只是一个js文件,那么就不能

如果它只是一个请求uri,并使用服务器端脚本输出javascript内容,则可以从get参数获取变量

如果要将变量传递给whatever.js,只需在include
whater.js
之前定义变量,然后在
whater.js
中使用变量即可

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

我不知道如何仅为当前块脚本元素获取src属性。但是您可以获取页面上的所有脚本,然后解析它们

<script type="text/javascript">
<!--// 
  ref = 'images';
//-->
</script>

希望这足够继续下去

您将需要类似于以下内容的代码。这会在比赛结束后得到一切吗?并将其划分为基本的键/对数组

//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];
}
var GETDATA=new Array();
//获取窗口位置中“?”后面的字符串。
var sGet=window.location.search;
if(sGet)//if有一个值。。。
{
//删除前导“?”
sGet=sGet.substr(1);
//生成名称-值对的字符串数组。
//每个数组元素的形式为“foo=bar”
var sNVPairs=分账(“&”);
//现在,对于每个名称-值对,我们需要提取
//名称和值。
对于(变量i=0;i
简化mrtsherman的想法,只需找到带有正确的
src
的脚本(从
which.js
):

更新:因为您只想从PHP输出一些东西并在脚本中使用,所以您有一个更好的选择:

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'
    }
}
这是在客户端脚本中从服务器端获取数据的推荐和标准方法


请参见和

我似乎记得在某些浏览器中有一种获取调用脚本标记的方法,但我找不到它的引用

下一个最好的方法是如下所示:

您可以使用您喜欢的源搜索脚本标记,然后提取字符串小心如果根据用户输入设置此值,则用户可能会插入扫描仪可能会误解的查询字符串,从而产生风险。应该使用与常规查询字符串相同的偏执URL解析方法。

试试这个


这里的问题是,无法从脚本的URL获取查询:

$("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));

});
<script src="http://doamin.com/js/whatever.js?ref=images">
     //Want to get the query here, but you can't
</script>
http://domain.com/ThePHPPageContainingTheScript.php?ref=images
然后,此页面包含以下脚本:

$("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));

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

//从window.location获取查询,这是可能的!

为了防止任何人在搜索类似的内容时使用它,下面是一个示例,说明一种不使用AJAX向脚本发送大量数据的方法

<script src="http://doamin.com/js/whatever.js">
     //Get the query from window.location, it's possible!
</script>

我认为这是一个重复的问题:一种方法是使用服务器端技术读取请求参数,并将其动态注入到所服务的JS中。这是一个选项吗?我正在使用php
ref
取决于生成的php变量。我想把这个变量传递给js文件。服务器端对我来说没问题。我认为最好的方法是将它作为url变量放在js文件的末尾。但我不知道如何访问它。meNOTE还可以使用其他方法:这主要适用于带有?var=foo声明的html或php页面。在这种情况下,您不会处理
location.search
。这不起作用<代码>窗口。位置适用于页面的来源,而不是包含的脚本文件的来源。即使你把代码放在JS脚本文件中,它仍然会处理当前页面的URL。这就是为什么我在评论中添加了我的not。这是一个非常好而且非常简单的解决方案。这就是你真正想要的。问题完全被别人误解了。是的,就是这样。关于这一点,我们有很多正确答案。这一款因其灵活性而获胜。使用php设置
ref
后,页面上的任何js文件现在都可以读取。请注意,这会污染全局范围,您可能需要选择一个更具体的变量名,或者将其添加为另一个对象的属性以避免冲突。我没有尝试过这一点,但似乎也是一个优雅的解决方案。
<script src="test.js" name="testjs">
{
  "here"    : "is",
  "another" : "way",
  "of"      : "passing",
  "larger"  : "amounts",
  "of"      : "data",
  "to"      : "a script"
}
</script>
(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);
  }
})();