最热门文章

常用标签

云输入法 好的站点 数据之美 数据库优化 网站优化 网页安全 跨浏览器 输入法 重构 页面优化 Android CSS css优化 facebook firebug HTML html重构 html5 HTTP协议 http历史 ie javascript Last Modified lighttpd linux linux后台开发 MYSQL mysql优化 netstat ping QQ QQ云输入法 QQWeb输入法 web web开发 Web服务器 web服务器配置 web设计 WEB颜色 xhtml

Posts Tagged ‘javascript’

[转]10个奇幻的HTML5和Javascript效果

外网Queness曾发表博文《10 Jaw Dropping HTML5 and Javascript Effects》,文中介绍了10 个奇幻的HTML5和Javascript效果。个人网站“我爱互联网”对此文进行了翻译,现把译文转载于此,全文如下: 又10款令人惊奇的HTML5和javascript效果,今天网游的时候,又偶然踫到的这几款很不错的效果。回到几年前,这些效果是根本不可能实现,只能用flash做,但是现在,已经很轻松的就可以实现了。 之前也发布了几篇此类的文章,但觉得这几款效果确实很让人难以割舍,它们奇幻、炫丽,还是收藏了和大家一起分享吧。:-p 等会,大家要记得用高版本的一些浏览器哦,要不看不到效果的,我用的是Firefox3.5.11。 个人非常喜欢Breathing Galaxies和FlowerPower,真得很炫,你喜欢哪款呢? Breathing Galaxies 使用键盘来改变形状中的线条样式,或移动鼠标来创建一个新的形状。 Noise Field 移动鼠标来改变粒子的运动。点击随机产生参数。 Keylight 根据按键放置的位置不同来产生不同的单调。 Swirling Tentacles 循环产生彩色不同颜色的三维线。 FlowerPower 来自于大自然另一个灵感 – 使用贝赛尔曲线做为笔刷绘图工具花朵,使用鼠标点击或拖动均可看到效果。 Blob 一滴可以在屏幕上抛掷的柔软的水泡,它可以在浏览器窗口中弹跳。这个水泡可以分割成许多小水滴(双击),如果他们碰撞小水滴们还会合并成一个大水滴。 Rotating Spiral 你是越来越困,很困…. 独立旋转螺旋的效果 – 简单,但视觉吸引力。点击开始,停止和扭转旋转。 Magnetic 磁点是用来控制粒子流。如果有很多粒子围绕磁铁,它会辐射的颜色和大小的增加。鼠标双击操作。 Trail 五颜六色的粒子跟随鼠标并在鼠标周围旋转,同时生成一个有机的痕迹,然后慢慢地淡出。 Graph Layout 一种交互式力向图的布局。 原文链接:10 Jaw Dropping HTML5 and Javascript Effects 译文链接:10个奇幻的HTML5和Javascript效果

Posted in Web前端, 转载
Tags: ,

网站优化之避免javascript代码不停刷新页面引起攻击

最近遇到的怪事越来越多,之前是因为在页面内嵌javascript代码中的一段小小的注释引来的xss漏洞。昨天又遇到一个javascript代码考虑不周导致的不停刷新页面的情况,如果这个页面被别人发现了,很容易就会导致站点的ddos攻击。 网站的很多登录操作最终都会转到一个页面去统一处理,这个页面根据传入的参数的不同,然后跳转到对应的页面去。如果这个跳转页面的js没有判断好要跳转过去去的页面是不是自己。 一些用户就会将跳转的页面设置为这个页面,将导致这个页面不停的在自身进行跳转,不停的刷新。如果规模过大的话,这个攻击就变得很强大了。 所以在写js代码的时候还是要多多考虑一些边界的条件,js代码也会攻击的。例如,下面这段代码,如果前面增加一些输入的判断,不小心判断出错,让自己跳转到自己的话,该页面不停的刷新自己,麻烦就到了。 <html> <head> <title>location auto reload</title> </head> <body> location auto reload <script type="text/javascript"> var url = window.location.href; window.location.reload(url); </script> </body> </html> 呵呵,注意一下location这个对象: Location 对象的 reload() 方法可以重新装载当前文档,replace() 可以装载一个新文档而无须为它创建一个新的历史记录,也就是说,在浏览器的历史列表中,新文档将替换当前文档。 Location 对象属性 属性 描述 IE F O hash 设置或返回从井号 (#) 开始的 URL(锚)。 4 1 9 host 设置或返回主机名和当前 URL 的端口号。 4 1 9 hostname 设置或返回当前 URL 的主机名。 4 1 9 href 设置或返回完整的 URL。 4 1 9 pathname 设置或返回当前 URL 的路径部分。 4 1 9 port 设置或返回当前 URL 的端口号。 4 1 9 protocol 设置或返回当前 URL 的协议。 4 1 9 search 设置或返回从问号 (?) 开始的 URL(查询部分)。 4 1 9 Location 对象方法 属性 描述 IE F O assign() 加载新的文档。 4 1 9 reload() 重新加载当前文档。 4 1 9 replace() 用新的文档替换当前文档。 4 1 9


javascript简短的编码规范

写代码最好形成一定的编码规范,这样的话在交接起来,或者一起编写代码的时候会变得容易很多! 下面整理了一些编写javascript代码的时候常常注意的一些规范: 1 每行80个字符,很多编辑工具可以方便的来设置这个值的 2 注释 最好是单独的一行,要具有意义: //a的作用是*** var a = 2; 3 变量的声明务必要有var,否则会导致大量的全局变量的存在,从而引起不必要的混乱 var a = 3; function testVar(){ var a = 4; alert(a); } testVar(); alert(a); 4 每行只写一条执行语句,这样代码看起来简单明了 5 缩进建议统一使用4个空格的tab来缩进。由于tab在不同的编辑器下的长度是不一致的,所以需要规定就是4个空格,处理起来会一致一些 6 return 表达式返回的时候,一定要将需要返回的表达式写在一行,否则可能会因换行解释成为结束,到时return一个undefined的值 function a(){ return 1; } alert(a()); 7 如果要用到内部函数的话,建议使用“_”开头,如function _inFunc()感觉区分明显一些 8 变量命名的话,尽量保持有语义一些,少用全局变量,采用匈牙利命名方式,如wordPress这样的 大概想到这么多,欢迎补充。


关于javascript的条件注释

在写javascript的时候,常常会为了ie做一些特殊的事情,如使用canvas,一些ie下特有的插件啥的。这些事情在其它的浏览器又不需要,如何来只是根据ie浏览器选择对应的javascript代码呢。 ie浏览器提供了条件注释来实现这个目的。 1 如何根据浏览器的类型做一些不同的事情? Web服务器使用useragent,如browsermatch。BrowserMatch regex [!]env-variable[=value] [[!]env-variable[=value]] ... 譬如在服务器配置压缩的时候,针对一些浏览器做一些特殊的设置, # Netscape 4.x 有一些问题... BrowserMatch ^Mozilla/4 gzip-only-text/html 2 能否在前端来做一些条件判断的东东? 尤其是在加载一些为特定浏览器编写的javascript和css的时候(尤其是ie),能否直接在浏览器中来做条件过滤。 ie5以及其后的版本都支持条件注释 好处: 1) 一些低版本浏览器没有支持的特性,低版本浏览器都不回去进行解析和下载。 2) 跨浏览器,向后兼容。 条件注释的语法: 1 向后隐藏的。低版本浏览器不支持的话,就不会做任何的事情。ie5以后的版本会判断条件是否为真来解释执行注释中的代码。 <!--[if expression]> HTML <![endif]--> <!--[if IE 8]> <p>Welcome to Internet Explorer 8.</p> <![endif]--> 当浏览器的版本号是ie8的时候才会执行下面的代码。 2 向后兼容的。低版本浏览器也会来进行解释执行。 <![if expression]> HTML <![endif]> 由于注释部分不是合法的html标签,所以会被低版本的浏览器忽略。因此代码会被执行。 <![if lt IE 9]> <p>Please upgrade to Internet Explorer version 9.</p> <![endif]> 条件注释中常常使用到的条件判断: Item Example Comment IE [if IE] The string "IE" is a feature corresponding to the version of Internet Explorer used ...


URL编码转换Javascript常用的几个函数说明

呵呵,有时常常会对Javascript对url编码的三个函数:esapce,encodeURI,encodeURLComponent,以及这个三个函数对应的解码函数感到困惑。 今天就来一一解读一下,整理一下自己的思路:): 1 escape 这个是最古老的,实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,“春”是第6625个(十六进制)字符,“节”是第8282个(十六进制)字符。 在地址栏执行:javascript:alert(escape('春节'))试试。 它的具体规则是,除了ASCII字母、数字、标点符号“@ * _ + - . /”以外,对其他所有字符进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。 对应的解码函数是unescape()。 2 encodeURI encodeURI()是Javascript中真正用来对URL编码的函数。 它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号“; / ? : @ & = + $ , #”,也不进行编码。 编码后,它输出符号的utf-8形式,并且在每个字节前加上%。试试:javascript:alert(encodeURI('http://www.qq.com?a=春节&b=3+2')); 它对应的解码函数是decodeURI()。 3 encodeURIComponent 最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。 因此,“; / ? : @ & = + $ , #”,这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。 试试这段代码:javascript:alert(encodeURIComponent('http://www.qq.com?a=春节&b=3+2')) 所以使用encodeURIComponent时一般都是对参数来进行编码。 它对应的解码函数是decodeURIComponent() 参考: http://www.w3school.com.cn/js/jsref_escape.asp


网站优化之异步加载javascript

在我们的页面中,如果不是显示指出来的话,javascript是同步加载的,也就是javascript的加载是阻塞的,后面的元素需要等待javascript加载完毕后才能进行再加载。呵呵,对于一些意义不是很大的javascript,如果放在页面的头部,如果加载很慢的话,会严重影响用户的体验的。 有人会问这时为什么呢?因为有可能你的javascript代码会动态的植入一些元素到页面的dom中。 因此对于那些会有修改dom的javascript(最简单如里面会有document.writlen这样的语句),我们只能阻塞的加载,而且最好也是放在页面的最底部。但是对于那些不会导致dom修改的javascript,如一些统计的javascript,如google的统计等,我们完全可以异步的来加载,不必同步阻塞的来等待。如何异步加载一个javascript文件呢? 一 defer方式 在w3c的html中定义的script标签有一个defer的属性,这个属性开启的话表示这段javascript代码可以延迟加载。 <!ELEMENT SCRIPT - - %Script; -- script statements --> <!ATTLIST SCRIPT charset %Charset; #IMPLIED -- char encoding of linked resource -- type ...


Javascript常用函数整理

js的框架现在很多了,而且都很好使用,诸如jquery、yui、ext等,但是有的时候我们只需要一些小小的功能,加载一个大的框架又觉得比较的麻烦,如trim这样的,于是我们就要自己动手来写代码了,往往这些代码散落在之前写的很多地方,很少整理过。每每要用的时候又要回过头来找,麻烦啊。这里整理诸如trim、排序、cookie操作相关的函数,做一个小小的备份,后续使用起来也方便一些。 1 trim:将一个字符串前后的空格去掉,利用正则表达式实现起来比较方便。(个人不太建议随便修改内置对象的prototype) String.prototype.trim = function() {    return this.replace(/^\s+|\s+$/g,""); } String.prototype.ltrim = function() {    return this.replace(/^\s+/g,""); } String.prototype.rtrim = function() {    return this.replace(/\s+$/g,""); } var test = "   Test   "; var test1 = test.ltrim();   // returns "Test   " var test2 = test.rtrim();   // returns "   Test" var test3 = test.trim();    // returns "Test" 2 Array ...


网站优化之javascript出错监控上报

我们写的javascript不一定都能保证是没有问题,可能在某些特殊的环境下,后者某些浏览器上,某些用户的cookie环境等导致javascript代码执行出错。这个时候我们需要知道javascript代码执行有问题,从而在下一个版本中解决这个问题。 怎么来发现我们的javascript代码有问题呢,通过damnit网站提供的工具可以方便的解决这个问题。 1 在ie和firefox下onerror这个事件,当javascript代码执行出错的时候,会触发这个事件,我们添加这个事件的处理函数,在处理函数里面添加上报即可。 如果需要利用 onerror 事件,就必须创建一个处理错误的函数。你可以把这个函数叫作 onerror 事件处理器 (onerror event handler)。这个事件处理器使用三个参数来调用:msg(错误消息)、url(发生错误的页面的 url)、line(发生错误的代码行) onerror=handleErr var txt="" function handleErr(msg,url,l) { txt="There was an error on this page.\n\n" txt+="Error: " + msg + "\n" txt+="URL: " + url + "\n" txt+="Line: " + l + "\n\n" txt+="Click OK to continue.\n\n" alert(txt); return ...


Javascript开源开发工具

一些好的开发工具,每次总是要用的时候才去慢慢的搜索查找,实在太麻烦,今天整理一下之前用到的javascript开发过程中使用到的一些开发工具,便于以后找起来比较方便: javascript代码格式化工具http://jsbeautifier.org/,不仅仅是格式化,还是反编译的工具,查看json数据的时候也比较方便。 javascript代码检测工具http://jslint.com/ ,对你的javasrcipt代码进行严格的检查,规避潜在的代码风险。JSLint is a JavaScript program that looks for problems in JavaScript programs. It is a code quality tool. javascript代码压缩工具http://www.crockford.com/javascript/jsmin.html,去除你代码中的无用的字符,如回车,换行。对于该的空格,tab键等,配合jslint使用能够极大的较少你的js代码的大小。 javascript代码混淆压缩工具http://dean.edwards.name/packer/,不但压缩你的javascript代码,同时将其中的变量以及函数进行hash混淆,导致代码变得很难读,同时大小也压缩惊人。 json格式检查工具http://www.jsonlint.com/,检查你的json是否是合法的格式,定位其中存在的问题。 javascript代码压缩工具之yui compressorhttp://developer.yahoo.com/yui/compressor/ ,jsmin之外的另外一个javascript压缩整理工具。 javascript调试工具 firebug,vs studio,Companion.JS javascript代码注释工具 jsdoc http://jsdoc.sourceforge.net/ javascript内存泄漏查看工具 Drip/sIEve 这是来自微软GPDE团队的一个查看javascript内存泄漏的小工具Javascript Leaks Detector firefox下的内存泄漏检测工具 Leak Monitor 你还想到什么工具,欢迎回复!


javascript中的两次非运算(!!操作符)

看到一些js代码中常常会有这样的操作if(!!a)或者var a = !!a ;一直有点不太理解,今天有人问了这个问题,于是去查找一下。 两次求!!的用意何在呢? 在firebug中试试如下一段代码: 1 var  a = true && "test"; alert(a);alert(typeof a); 得到的值是test和string 2 var a = 0 && "test"; alert(a);alert(typeof a); 得到的值是0和number 新的ecma标准中说: expr1 && expr2; // 如果为false返回expr1, 反之返回 expr2 expr1 || expr2; // 如果为真返回expr1, 反之返回expr2 var a = !!a;的目的就是为了是的a变成一个boolean类型的变量,同时能够保持应该是bool值。 如: var  a = true && "test";alert(a === true)是false的,这是如果希望a === true,那么就需要将a进行两次的!!操作。 如上述,不知道你明白了没!o(∩_∩)o 哈哈 了解一下javascript中的boolean类型的潜规则转换: Boolean( false ); ...