【小游戏】如何给外部引用的js文件传递参数。

Mr-Jee 2010-12-22 11:37:11
要求:
1、兼容IE6 7 8、Firefox、chrome

加分:
1、第一次发布且完美实现 +20分
2、第一次发布但实现有局限性 +10分
3、非第一次发布但完美实现 +10分
4、之前有发布的解决方案的变种 +5分

如果答案多适当会加分

我先发几个我所知道的解决方案
1、
<script language="javascript">
var g = "I'm here";
</script>
<script tpye="text/javascript" src="test.js"></script>

test.js文件
alert(g);

2、

<script tpye="text/javascript" src="test.js?a=1&b=2" id="testjs"></script>

test.js文件
var test = document.getElementById("testjs");
var src = test.getAttribute("src");
alert(src.substring(src.indexOf('?')+1));

方法二的一个变种
<script tpye="text/javascript" src="test.js" data="a=1&b=2" id="testjs"></script>

test.js文件

var test = document.getElementById("testjs");
alert(test.getAttribute("data"));

3、
<script tpye="text/javascript" src="test.js">
var temp = "just test";
</script>

test.js文件
var script = document.getElementsByTagName("script");
eval(script[script.length-1].innerHTML);
alert(temp);


题外话:这样的做法看上去能解决些问题,但是事实上有一个不争的时候,就是增加了耦合度。双方需要有个规范。无论是变量名的定义,还是实现方式的限制。所以通常情况下可以考虑用其他的方法来绕过。
...全文
1468 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
margox 2012-08-09
  • 打赏
  • 举报
回复
直接放个隐藏域存入值再在js里面获取这个值不就行了
001007009 2011-01-15
  • 打赏
  • 举报
回复
作个标记
JKelfin 2011-01-13
  • 打赏
  • 举报
回复
支持HTML5,Web存储.
<script>
localStorage.a="5";
</script>
  • 打赏
  • 举报
回复
楼上你莫名多出来这么一个链接,还不如用其它很多很多空标签,然后加个自定义属性。

总体说,自定义属性,和COOKIE,HASH,NAME等,包括设置SRC里形式化的参数,和设置普通变量是一回事。都是设置了一个数据在某处,然后去寻找它。这和真正的传参机制不同,真正的传参机制只要使用形参名称就可以得到传递来的实参数据。

所以看透这个的话,根据目标情况,想怎样就怎样,该怎样就怎样,需求就会自然地告诉你怎样做。
kaifadi 2010-12-23
  • 打赏
  • 举报
回复
想了10多分钟实在想不出什么了,JS里的COOKIE,HASH,NAME全被说光了。还有13楼的总结,基本全用上了。只能说来个变体了,换成超级链接,看看能不能出点怪现象!
<a href="test.js?a=5" id='dd'>333</a>
<script type="text/javascript" src="test.js"></script>

test.js

alert(document.getElementById("dd").href.match(/\ba=([^&]*)/)[1]);
Mr-Jee 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazywa 的回复:]

怎样算完美?
[/Quote]
以上浏览器可以执行即可算是完美了~~
不过要是能完全符合标准 那就……
Crazywa 2010-12-22
  • 打赏
  • 举报
回复
怎样算完美?
Mr-Jee 2010-12-22
  • 打赏
  • 举报
回复
其实有些方式的变种是带来一些geek和hack的做法,方便简洁的说。
但是真正的使用上都是遵循规范和代码风格统一重要
  • 打赏
  • 举报
回复
穷举行为本身似乎并没有任何意义。从完活的角度看,只要有一种可以实现即可。

之所以要讨论,我觉得应该从不同情况下哪种形式更有利于简明清楚地显示程序逻辑,降低以后维护的难度。

比如全局变量的方式,一头一尾,中间隔了N多代码,那以后维护的时候就没法说了。相信各位在中型代码中真正使用它的时候恐怕为零。

就我个人来说,一般都喜欢中规中矩地用src="test.php?a=1&b=2"这种方式。别的,除非极特殊,或者故意要阴人,否则都不必考虑。
jcx396158820 2010-12-22
  • 打赏
  • 举报
回复
占个位子,好像方法都让你们想了
strife013 2010-12-22
  • 打赏
  • 举报
回复
13楼的总结很好了,我分给
fxs_2008 2010-12-22
  • 打赏
  • 举报
回复
适用不同

一是存全局量
这个好理解;
二是存cookie,这个具有cookie域有效

三是<script tpye="text/javascript" src="test.js">
var temp = "just test";
</script>
这种方式,如果能在onload之前执行里面的代码,也是可行和灵活,否则只能在text.js重新执行一遍

四,src到程序文件,如php
当然需要服务器程序支持。但接收参数灵活,可以进行程序的任何处理。比如js合并。
猿敲月下码 2010-12-22
  • 打赏
  • 举报
回复
其实变来变去道理都一样的,就是把外部参数传进去.加上eval()就更灵活了

test.html
-----------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- 没规定不能用jQuery -->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<SCRIPT LANGUAGE="JavaScript">
<!--
$.ajax({ url: "test.txt", success: function(e){
eval(e)
say();
}});
//-->
</SCRIPT>
<script src="test.js"></script>
</HEAD>
<BODY>
</BODY>
</HTML>


test.js
------------
alert(w);



test.txt
------------
w="hello world"

function say(){
alert("say " + w);
}
Crazywa 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cj205 的回复:]

引用 6 楼 crazywa 的回复:

大叔那也算啊?
那下面的岂不是也算?
JScript code

<script>
var s = 1;
</script>
<script language="javascript" src="xx.txt"></script>


xx.txt
JScript code

alert(s);

请看我的第一个方案。。……
[/Quote]
那就
var jsArgument = {};
然后关联数组是不是就算是另一种了?
不算的话,那么window.xx岂不是也不能算另一种了?
还有document.xx那就都不能算了。
话说,连在js文件外面声明都算,就没啥嚼头了,随便找个全局变量,添加个属性存一下,外部js直接调用。
要说喜欢,还是喜欢你的第二种方案那种方式。
介样子的话,可就没什么嚼头了,还不如玩玩算法。

继续忙去了,囧。。。
十一文 2010-12-22
  • 打赏
  • 举报
回复

汗我的方式似乎不可以
你们都把方法想完了
十一文 2010-12-22
  • 打赏
  • 举报
回复

汗 还有别的方式吗?
<script language="javascript" src="xx.txt" id="sss"></script>
<script language="javascript">
var arg=1;
var ac=document.getElmentById("sss");
eval(ac.innerHTML+" var c="+arg)
</sctipt>
Mr-Jee 2010-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 crazywa 的回复:]

大叔那也算啊?
那下面的岂不是也算?
JScript code

<script>
var s = 1;
</script>
<script language="javascript" src="xx.txt"></script>


xx.txt
JScript code

alert(s);
[/Quote]
请看我的第一个方案。。。
fxs_2008 2010-12-22
  • 打赏
  • 举报
回复
一般不赞成在外部js中直接调用或执行函数
一般全局变量可以任何地方调用。

如果实在要用,可以试试下这种方法。

<script tpye="text/javascript" src="test.php?a=1&b=2"></script>

document.write('<script tpye="text/javascript" src="test.php?a=1&b=2""></script>");

这样不就可以了!
test.php

<?php
header('content type:text/javascipt'); /通知浏览器是js文件
$a=$_GET['a']
$b=$_GET['b'];
echo '任何javascript';


Crazywa 2010-12-22
  • 打赏
  • 举报
回复
大叔那也算啊?
那下面的岂不是也算?

<script>
var s = 1;
</script>
<script language="javascript" src="xx.txt"></script>

xx.txt

alert(s);
王集鹄 2010-12-22
  • 打赏
  • 举报
回复
--test3.html--
<script>
window.name = "g=I'm here";
</script>
<script tpye="text/javascript" src="test3.js"></script>


--test3.html--
var m = window.name.match(/\bg=([^&]*)/); 
m && alert(m[1]);


占坑
加载更多回复(2)

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧