2013-07-08 169 views
2

传递JavaScript的论点,如果我有一个javascript像通过脚本src属性

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

SRC我可以多一些值添加到它的

<script src="http://domain.com/js/script.js?state=1"> 

结束并获得了JavaScript内的状态?

这个想法来自一个情况,我必须得到客户端解析并保存到会话,但我不能把它通过PHP,所以我必须得到它的JavaScript,但我不想显示脚本裸从源代码

我认为这是可能的,因为我看到很多来源确实有这样的链接!

+1

为什么你必须将该决议通过脚本?脚本无法在需要时计算它吗? – JJJ

+0

我不明白你的意思。 “国家”会做什么? –

+1

任何时候,我已经添加一个查询字符串参数到脚本源,它已经是一个时间戳或版本,以防止缓存。 –

回答

3

你不能这样做吗?

<script> 
    var state = 1; 
</script> 
<script src="http://domain.com/js/script.js"> 
+0

啊,谢谢!我怎么能忘记这一点! –

+0

我同意dandavis。这并没有回答这个问题。当然,它解决了他们的问题。但他们提出的问题是不同的。 – RoboticRenaissance

1

调用JS工作之前给变量。但是如果你不想用vars污染Global,你可以尝试一下PHP的方法:

在头文件中声明一个PHP文件,它将是一个javascript,根据你想要的变量抓取它,使用$_GET值和输出具有

<script src="http://domain.com/js/script.php?state=1" />

<?php 
// We'll be outputting a JS 
header('Content-type: text/javascript'); 

$phpState = $_GET['state']; 
?> 

function someCommonJS(){ 
    var myState = "<?=$phpState;?>"; /*printing php var into js*/ 
} 

<?php 
/* some more php*/ 
?> 

/*some more js*/ 

这样的文件来,只要你想格式化的js文件,无需用户能够看到所有的if else如果通过JS实现,这将是可见的。

10

以防万一有人想实际答案的实际问题,而不是诉诸于全局变量和两个脚本标签:

<script src="http://domain.com/js/script.js?state=1"></script> 

内的script.js:

(function(){ 
    var myTags=document.getElementsByTagName("script"); 
    var src= myTag[myTag.length-1].src; 
    var state=unescape(src).split("state=")[1].split("&")[0]; 
    alert(state); 
}()); 

,如果您需要传递很多东西,使用通用的queryString解析器将脚本的queryString转换为对象。

+0

我知道这已经两岁了,但它完美地适用于我正在构建的包含我的1行小部件。它需要一个用户ID,我现在可以传递而不会混淆全局名称空间。 +1 – jrounsav

+2

@Cluckles:知道新的浏览器支持'document.currentScript'属性,这使得函数的“胆量”归结为'state = unescape(document.currentScript.src).split(“state =”) [1] .split( “&”)[0]' – dandavis