通过SRC属性将variables传递给JavaScript
在我的HTML文件中,我已经链接到JS:
src="myscript.js?config=true"
我的JS可以直接读取这个variables的值吗?
alert (config);
这不起作用,并且FireFox错误控制台显示“configuration未定义”。 如何读取通过JS文件中的src属性传递的variables? 这是简单的吗?
<script> var config=true; </script> <script src="myscript.js"></script>
你不能以你尝试的方式将variables传递给JS。 SCRIPT标记不会创build一个Window对象(具有查询string),而不是服务器端代码。
是的,您可以,但您需要知道脚本中的确切脚本文件名称:
var libFileName = 'myscript.js', scripts = document.head.getElementsByTagName("script"), i, j, src, parts, basePath, options = {}; for (i = 0; i < scripts.length; i++) { src = scripts[i].src; if (src.indexOf(libFileName) != -1) { parts = src.split('?'); basePath = parts[0].replace(libFileName, ''); if (parts[1]) { var opt = parts[1].split('&'); for (j = opt.length-1; j >= 0; --j) { var pair = opt[j].split('='); options[pair[0]] = pair[1]; } } break; } }
你现在有一个“选项”variables,其参数已通过。 我没有testing,我从http://code.google.com/p/canvas-text/source/browse/trunk/canvas.text.js中改变了一下。;
你可能已经看到了这一点,但真正的JS文件正在预处理服务器端,首先使用PHP或其他语言。 服务器端代码将打印/回显与设置variables的JavaScript。 我看过一个脚本化的广告服务,之前这样做,这让我看看是否可以用普通的ol js来完成,但它不能。
您需要使用Javascript来查找脚本的src属性,并在'?'之后parsingvariables。 使用Prototype.js框架,它看起来像这样:
var js = /myscript\.js(\?.*)?$/; // regex to match .js var jsfile = $$('head script[src]').findAll(function(s) { return s.src.match(js); }).each(function(s) { var path = s.src.replace(js, ''), includes = s.src.match(/\?.*([az,]*)/); config = (includes ? includes[1].split('='); alert(config[1]); // should alert "true" ?? });
我的JavaScript /正则expression式技能是生锈的,但这是一般的想法。 直接从scriptaculous.js文件中删除!
您的脚本可以find自己的脚本节点,并检查src属性,并提取您喜欢的任何信息。
var scripts = document.getElementsByTagName ('script'); for (var s, i = scripts.length; i && (s = scripts[--i]);) { if ((s = s.getAttribute ('src')) && (s = s.match (/^(.*)myscript.js(\?\s*(.+))?\s*/))) { alert ("Parameter string : '" + s[3] + "'"); break; } }
这是否应该完成,是一个公平的问题,但如果你想这样做, http://feather.elektrum.org/book/src.html真的显示如何。; 假设您的浏览器在呈现脚本标记时显示阻塞(当前正确,但可能不是将来的证据),相关脚本始终是该页面上的最后一个脚本。
然后使用一些像jQuery和http://plugins.jquery.com/project/parseQuery这样的框架和插件,这变得非常简单。; 惊讶的是,它还没有一个插件。
有点相关的是John Resig的降级脚本标记,但是在外部脚本之后运行代码,而不是作为初始化的一部分: http : //ejohn.org/blog/degrading-script-tags/
积分:将parameter passing给JavaScript文件 ,将parameter passing给JavaScript文件
使用全局variables不是一个如此干净或安全的解决scheme,而是可以使用data-X属性,它更清洁和更安全:
<script type="text/javascript" data-parameter_1="value_1" ... src="/js/myfile.js"></script>
从myfile.js中可以访问数据参数,例如使用jQuery:
var parameter1 = $('script[src*="myfile.js"]').data('parameter_1');
显然,“myfile.is”和“parameter_1”必须在两个源中匹配;)