Mik*_* B. 5 javascript external
Javascript中是否可以通过src参数传递变量?即.
<script type="text/javascript" src="http://domain.com/twitter.js?handle=aplusk" />`
Run Code Online (Sandbox Code Playgroud)
我想twitter.js查看是否在执行我需要它之前传递了"句柄"并将其响应返回到原始页面调用twitter.js.
我最初创建了一个函数twitter.js,执行以下操作:
function getHandle() {
var vars = [], hash, username;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++) {
hash = hashes[i].split('=');
if (hash[0] == 'handle')
username = hash[1];
}
return username;
}
Run Code Online (Sandbox Code Playgroud)
问题,这是有道理的,window.location.href不会对我正在调用的文件起作用 <script src="" />
谢谢!
我可以在这看到两个解决方案.
首先:您可以在托管twitter.js的服务器上处理这些GET参数,以便动态更改js文件.例如,您的文件是:
var handle = {{ handle }};
Run Code Online (Sandbox Code Playgroud)
并且您的服务器以某种方式处理该文件,替换该twitter.js模板文件,具体取决于发送的请求.
第二个选项是在加载twitter.js的页面上设置全局变量,如下所示:
<script type="text/javascript">
window.twitter_js_handle = 'aplusk';
</script>
<script type="text/javascript" src="http://domain.com/twitter.js" />
Run Code Online (Sandbox Code Playgroud)
在twitter.js中:
var handle = window.twitter_js_handle || null;
Run Code Online (Sandbox Code Playgroud)
我使用以下模式将查询变量转换<script src="script.js?foo=bar&baz=zing"></script>为对象包含键:值对.代码放在script.js的顶部:
var getVars = {};
(function(){
var scripts, currentScript, queryString;
scripts = document.getElementsByTagName('script');
currentScript = scripts[ scripts.length - 1 ];
queryString = currentScript.getAttribute('src').replace(/[^\?]*/,'').split('&');
for(var i=0;i<queryString.length;i++){
var keVal = queryString[i].split('=');
getVars[ keyVal[0] ] = keyVal[1];
}
}());
// console.info( getVars );
// Object { foo="bar", baz="zing"}
Run Code Online (Sandbox Code Playgroud)
这可能不适用于延迟/异步添加的脚本元素,因为它依赖于立即执行代码.