慎用 script 节点的 src 属性来传递参数
作者:xujiwei 来源:Architecting Life 时间:2009-11-18 12:59:00
在有些使用 javascript 来渲染数据的时候,为了能动态获取不同的数据,并且保持 javascript 代码的可扩展性,会将 javascript 代码中获取数据的部分需要的参数提取出来,做为参数放在 script 节点的外部。
一般来说,传递参数到 javascript 文件内部的方法有两种,一种是将参数写在一个 script 节点中,写成全局变量的方式的传递给紧接着这个 script 节点的外部 javascript 中,Google Analytics 就是使用这样的方式:
<script type="text/javascript">
var p1 = "v1", p2 = "v2";
</script>
<script type="text/javascript" src="foo.js"></script>
另外一种是将参数直接写在 script 节点的 src 属性中,相当于一个页面的查询字符串一样:
<script type="text/javascript" src="foo.js?p1=v1&p2=v2"></script>
不过,使用 script 节点的 src 属性来传递参数需要注意一个很重要的问题,那就是动态变化的 src 属性会导致缓存失效。
现在,为了网站性能的需要,一般都会将 javascript 文件放在独立的服务器上,并设置一个较长的过期时间,这样客户端只会在第一次访问网站时需要去下载这个 javascript 文件。但是,如果使用 src 来传递参数,就可能会使这种缓存策略失效。特别是 src 中存在动态参数的情况,例如统计脚本中如果有一个 ip 参数,那么访客每次连上线时,可能 ip 都会不同,就会导致 javascript 缓存失效了。
解决这个问题的方法也很简单,简单地的将 src 属性中的参数放到 script 节点的一个自定义属性中就可以了,例如 data-args,而 src 属性只需要保留一个时间戳就可以了。因为使用 src 属性来传递参数本来就需要定位 script 节点,所以改由 data-args 自定义属性来传递参数并不会增加额外的代码。只不过页面会通不过 w3c 的验证罢了 :)
<script type="text/javascript" src="foo.js" data-args="p1=v1&p2=v2"></script>
再次提醒,慎用 script 节点的 src 属性来传递参数 :)
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
SQL Server中将数据导出为XML和Json方法分享
![](https://img.aspxhome.com/file/2023/1/122361_0s.png)
go-micro微服务domain层开发示例详解
使用python实现希尔、计数、基数基础排序的代码
![](https://img.aspxhome.com/file/2023/9/65129_0s.gif)
Python实现Harbor私有镜像仓库垃圾自动化清理详情
python单元测试框架pytest介绍
![](https://img.aspxhome.com/file/2023/8/67268_0s.png)
JAVA正则表达式校验qq号码的方法
![](https://img.aspxhome.com/file/2023/6/64936_0s.png)
bootstrapValidator.min.js表单验证插件
设为首页与加入收藏的JS代码(多浏览器支持)
Python实现打印九九乘法表的不同方法总结
![](https://img.aspxhome.com/file/2023/3/115013_0s.png)
跟老齐学Python之关于类的初步认识
CSS实现完美垂直居中
golang与pgsql交互的实现
![](https://img.aspxhome.com/file/2023/4/123954_0s.png)
selenium+python截图不成功的解决方法
我的javascript小扎
利用python Pandas实现批量拆分Excel与合并Excel
sql Set IDENTITY_INSERT的用法
python中requests和https使用简单示例
Python实现将绝对URL替换成相对URL的方法
我所钟爱的HTML5资源
![](https://img.aspxhome.com/file/UploadPic/20107/23/01-73s.jpg)