Javascript中是否可以通过src
参数传递变量?即
<script type="text/javascript" src="http://domain.com/twitter.js?handle=aplusk" />`
我希望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;
}
问题,这是有道理的,window.location.href不会对我从<script src="" />
谢谢!
答案 0 :(得分:7)
我可以在这里看到两种解决方案。
首先:您可以在托管twitter.js的服务器上处理这些GET参数,以便动态更改js文件。例如,您的文件是:
var handle = {{ handle }};
您的服务器会以某种方式处理该文件,并根据发送的请求替换该twitter.js模板文件。
第二个选项是在加载twitter.js的页面上设置全局变量,如下所示:
<script type="text/javascript">
window.twitter_js_handle = 'aplusk';
</script>
<script type="text/javascript" src="http://domain.com/twitter.js" />
在twitter.js中:
var handle = window.twitter_js_handle || null;
答案 1 :(得分:7)
我使用以下模式将查询变量从<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"}
这可能不适用于延迟/异步添加的脚本元素,因为它依赖于即时代码执行。
答案 2 :(得分:1)
不确定。您可以访问该参数的唯一方法是通过服务器端。 Soo,使twitter.js成为一个PHP页面(使用mod_rewrite或其他)抓取$_GET['handle']
,然后将其自身作为Content-Type: text/javascript
并转储js的内容。
答案 3 :(得分:1)
我建议使用更多安全方法-必须添加ID:
<script id="myTargetScript" src="http://example.com/file.js?param=value" />
然后在您的.js
文件中
function GetParams(target_id)
{
var getVars = {};
if( document.getElementById(target_id) )
{
var queryString = document.getElementById(target_id).getAttribute('src').split("?").pop().split("&");
for(var i=0;i<queryString.length;i++){
var keyVal = queryString[i].split('=');
getVars[ keyVal[0] ] = keyVal[1];
}
}
return getVars;
}
// console.log( GetParams('myTargetScript') );