一直以来经过javascript操做css都是屡见不鲜,使用起来也没感受什么特殊,若是反其道而行之呢?
javascript
用CSS写出Javascript代码或者说用CSS调用JS代码可行吗?
css
答案是能够的,从技术层面上是能够实现的,不过由于安全缘由,限制也比较严重.所幸有所限制,否则估计要变得一团糟啊.目前比较可行的经过CSS执行Javascript的方式有如下几种.若是你还有其余方式,留言给我.html
(1) 经过expression()
java
这种方式应该只在IE下才好使,能够书写如:
express
background: expression(JS code resulting in a vali background image string here)浏览器
body {安全
width: expression(document.body.clientWidth > 1100)? "1100px" : "auto";xss
}测试
这种方式也就是在CSS的属性值中嵌入JS代码,仅在IE下生效,而且是比较老版本的IE,到底有多老,请自行尝试,我只能说567...IE8下我没有测试,有兴趣的童鞋能够测试完留言给我.url
(2) 经过url在CSS属性中注入
这种方式就是在好比设置background背景图片的时候,经过url('javascript:...')的方式将Javascript代码注入进去.
(3) HTC with IE
这个不是经过HTC手机实现...这种方式仅在IE下可行,经过CSS调用.htc文件来启用Javascript.
# CSS file
body {
behavior:url(script.htc);
}
# script.htc
<PUBLIC:COMPONENT TAGNAME="xss">
<PUBLIC:ATTACH EVENT="ondocumentready" ONEVENT="main()" LITERALCONTENT="false"/>
</PUBLIC:COMPONENT>
<SCRIPT>
function main()
{
alert("HTC script executed.");
}
</SCRIPT>
(4) XBL with Firefox
用法和上面HTC with IE相似,只不过仅支持Firefox浏览器.
body {
-moz-binding: url(script.xml#mycode);
}
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl" xmlns:html="http://www.w3.org/1999/xhtml">
<binding id="mycode">
<implementation>
<constructor>
alert("XBL script executed.");
</constructor>
</implementation>
</binding>
</bindings>
这个就是科普一下,让你们知道CSS之强大...在真正应用中委实没什么大用,不过你要是打算以此"做恶"却是能够研究研究...别说我给了你启发...