简单人生
幻想指点江山,梦中激扬文字
我自己的javascript是比较差的,所幸还能看得懂一些代码,只是自己比较懒,不太喜欢学习而已。
最近又偷偷的溜到国内JS强人幻宇的网站上兜了一圈。发现了一些自己以前从来没有注意过的东西!!!!!!

LOOK:http://script8.com/bbs/thread.asp?tid=322
标题为:有趣的script标签,大家想过用它来做些实际的事情吗? 

内容为:

    在网页中引入外部对象并传递参数,想来大家都有这个经历。一般来说,使用的标签是iframe和embed(针对flash),不过这两个标签都不能象xml一般设置参数,只能通过在url地址后追加查询字符串的方式来传值。htc倒是挺不错的,只是没有浏览器兼容性,想来大家也不考虑它了。

    用script标签可以把一个外部js文件载入到页面中,而且不管这个文件是否同域,都同样有效,这种跨域特性,可以说是独一无二的。一般情况下,我们都只是把js文件作为公用代码的一部分加以使用,在这里面集成一些公用函数和类。换个思维,我们把script标签看作是一个大的可视化的组件,对其传入参数,并根据参数进行不同的布局调整,这样做是很有意思的。

    举个例子,“<script width=300 height=200 filePath="http://mp3.baidu.com/abc.mp3" src=player.js></script>”,这样的写法是不是挺直观,而且又具有实用性呢?大家会问,player.js如何取到script标签里的参数?其实这很简单,只需要在player.js里查找到最后一个script元素,就是当前的这个元素了,然后用getAttribute方法,想取多少个参数都可以。


实际例子:

有个应用,拿出来给大家分享

由于xp的补丁,一夜之间让大江南北的网站上的flash全部加上虚框,需要点击才能激活。大家在恨得牙痛之时,只好想出对应的方法,下面是新浪网插入flash的方法:

-----------------------------------------------------

<script type="text/javascript" src="http://image2.sina.com.cn/home/sinaflash.js"></script>

<script>

var objFlash = new sinaFlash("abc.swf", "", "100", "100", "7", "", false,"high");
objFlash.addParam("wmode", "opaque");
objFlash.write("flashcontent_1D194BAF55E2");

</script>

-----------------------------------------------------

如果善用script标签,则可以简化为:

-----------------------------------------------------

<script src="swf.js" movie="abc.swf" width="100" height="100" wmode="opaque"></script>

-----------------------------------------------------

一句话足矣

 

下面是swf.js文件的内容:

-----------------------------------------------------

var ol,oJs,flaID,sMovie
ol=document.getElementsByTagName("script")
oJs=ol[ol.length-1]
flaID=oJs.getAttribute("flaID")||""
sMovie=oJs.getAttribute("movie")
if(sMovie.slice(0,1)=="{"&&sMovie.slice(-1)=="}")
    sMovie=eval(sMovie.slice(1,-1))
l="<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' id='"+flaID+"' width='"+(oJs.getAttribute("width")||"100%")+"' height='"+(oJs.getAttribute("height")||"100%")+"'>\
    <param name=movie value='"+sMovie+"' />\
    <param name=wmode value='"+(oJs.getAttribute("wmode")||"window")+"' />\
    <param name=allowscriptaccess value='always' />\
    <embed id='"+flaID+"' name='"+flaID+"' allowscriptaccess=always wmode=transparent src='"+sMovie+"' width=120% height=100% type='application/x-shockwave-flash'></embed>\
</object>"
document.write(l)

-----------------------------------------------------


他还说:

如何响应script元素的onload事件呢?

 

有意思的是,在firefox中触发的是onload事件,而在IE中,触发的则是onreadystatechange。所以我们可以用下面的代码来实现:

 

    var o=document.createElement("script")
    o.src="abc.js"
    o[document.all?"onreadystatechange":"onload"]=function(){
        //put your code here
    }
    document.body.appendChild(o)
    o=null


-------------------------------------------------

再次佩服一下牛人们……
posted on 2007-04-28 22:23 简单人生 阅读(1051) 评论(1)  编辑 收藏 引用 所属分类: Loving PHP
Comments
  • # re: javascript原来也可以这么用[从幻宇的网站上拷来,算是学习吧]
    来须苍真
    Posted @ 2007-05-25 14:28
    用 JS 我倒是知道可以躲过 W3C 的标准性检测,没想到也能躲过 IE 的安全检测。我拷贝下来试试,不过不喜欢这个方法。  回复  更多评论   
只有注册用户登录后才能发表评论。