我用这样的查询参数加载这个文件:
src='somefile.js?userId=123'
我在'somefile.js'文件中写了下面的函数,该文件读取'userId'查询参数 但我觉得这不是最好的方法。坦率地说,它非常难看。 有更好的方式吗?
function getId(){
var scripts = document.getElementsByTagName('script'), script;
for(var i in scripts){
if( scripts.hasOwnProperty(i) && scripts[i].src.indexOf('somefile.js') != -1 )
var script = scripts[i];
}
var s = (script.getAttribute.length !== undefined) ?
script.getAttribute('src') :
script.getAttribute('src', 2);
return getQueryParams('userId',s);
};
答案 0 :(得分:2)
// extracts the params from the currently running (external) script
var getScriptQp = (function(){
var scripts = document.getElementsByTagName('script');
var this_script_tag = scripts[scripts.length - 1]; //script tag of this file
if( typeof this_script_tag != undefined && this_script_tag.src )
var s = this_script_tag.src;
else{
return this.customer;
}
return s;
})();
// gets the Query Params of a givver query string
function getQueryParam(name, query){
name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
var regexS = "[\\?&]" + name + "=([^&#]*)";
var regex = new RegExp(regexS);
var results = regex.exec(query);
if (results == null)
return "";
else
return results[1];
}
getQueryParam( 'param',getScriptQp );
答案 1 :(得分:1)
阅读script
部分中的head
元素是可行的方法。有article的示例代码。这种方法看起来很脆弱,因为脚本的名称是硬编码的,如果重命名它可能会破坏。
答案 2 :(得分:1)
替代方式是:
<script>var userId = 123;</script>
。也就是说,请记住,JS代码在客户端运行,并且完全可由客户端控制。例如,您应该让JS在userId上执行某些特定于用户的逻辑,即依赖。在这种情况下,请将userId保持在服务器端的会话中,并使用ajax来获取结果。
答案 3 :(得分:0)
如果我错了,有人会纠正我,但我很确定如果你通过URL将params传递给你的脚本,这实际上意味着客户端永远不会缓存你的JS文件,因为每次它看起来都是不同的URL并将重新下载。