H5-JavaScript(三) 用javaScript 需考虑的问题
一、兼容性
由于js 本身是依靠浏览器的解释器来执行的,所以必然存在兼容性问题。 通常叫做“向后兼容” or“平稳退化”,确保低版本的浏览器不会因为你的程序挂掉。
1、禁用 Javascript 脚本
以打开一个新窗口为例。 调用Bom 中的api window.open("url","new_window_name","others");
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js 平稳退化</title> </head> <body> <!-- 1、方法利用 javascript:伪协议。 不支持伪协议的浏览器直接打不开--> <a href="javascript:popUp('http://www.baidu.com')">Example</a> <!-- 2、用a 标签的onclick 属性来调用js 脚本。遗憾的是和方法1 一样糟糕--> <a href="#" onclick="popUp('http://www.baidu.com');return false">Example</a> <!-- 3、好的做法,当浏览器禁用javascript 还是可以使用 --> <a href="http://www.baidu.com" onclick="popUp('http://www.baidu.com');return false">Example</a> <script> function popUp(winURL) { window.open(winURL,"popup","width=320,height=480"); } </script> </body> </html>
2、老浏览器对Dom支持程度不够
<script> window.load = prepareLinks(); //注意原书中没有(),firefox实践中必须加入。 function prepareLinks() { //检测浏览器对Dom 的支持 if (!document.getElementsByTagName) return false; var links = document.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { links[i].onclick = function() { //onclick监听与function 挂钩 popUp(this.getAttribute("href")); return false; } } } </script>
二、扩展性
在兼容性里边写的代码扩展性不好。应该学习css ,表示层和数据结构层分离,那行为层也应该和结构层分离。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>js分离</title> </head> <body> <a href="http://www.baidu.com">Example</a> <!-- html 加载完毕后再加载script 脚本 归口:性能--> <script src="js/popUp.js"></script> <script> window.load = prepareLinks(); //注意原书中没有(),firefox实践中必须加入。 function prepareLinks() { var links = document.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { links[i].onclick = function() { //说明启动onclick监听 popUp(this.getAttribute("href")); return false; } } } </script> </body> </html>
三、性能
1、减少对Dom 的访问
2、javascript 放置位置 </body>之前
3、浏览器协议传输的文件(js),包含中的所有注释,格式(空格,回车等字符),所以可以考虑 保存两份 js: 源代码一份, js_min 一份(用工具压缩过的脚步)
补充:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>js 图片库 修正版</title> 6 <link rel="stylesheet" href="css/layout.css" /> 7 </head> 8 <body> 9 <h1>Snapshots</h1> 10 <ul id="imagegallery"> 11 <li> 12 <a href="img/firefox.jpg" title="A firefox display" >FireFox</a> 13 </li> 14 <li> 15 <a href="img/coffee.jpg" title="a cup of black coffee" >Coffee</a> 16 </li> 17 <li> 18 <a href="img/rose.jpg" title="A red,red rose" >Rose</a> 19 </li> 20 <li> 21 <a href="img/bigben.jpg" title="The Famous clock" >Bigben</a> 22 </li> 23 </ul> 24 <img id="placeholder" src="img/placeholder.jpg" alt="my image gallery"> 25 <p id="description">Choose a img.</p> 26 <script type="text/javascript" src="js/showPic.js"></script> 27 <script type="text/javascript" src="js/preparegallery.js"></script> 28 <script type="text/javascript" src="js/addLoadEvent.js"></script> 29 <script> 30 addLoadEvent(preparegallery); 31 </script> 32 </body> 33 </html
1 function showPic(whichPic) { 2 if (! document.getElementById("placeholder")) return false; 3 var source = whichPic.getAttribute("href"); 4 var placeholder = document.getElementById("placeholder"); 5 placeholder.setAttribute("src",source); 6 if(document.getElementById("description")) { 7 var title = whichPic.getAttribute("title"); 8 var description = document.getElementById("description"); 9 description.firstChild.nodeValue = title; 10 } 11 return true; 12 }
function preparegallery() { if (!document.getElementById) return false; if (!document.getElementsByTagName) return false; var gallery = document.getElementById("imagegallery"); var links = gallery.getElementsByTagName("a"); for (var i = 0; i < links.length; i++) { links[i].onclick = function(){ return !showPic(this); } } }
1 function addLoadEvent(func){ 2 var oldonload = window.onload; 3 if(typeof window.onload != 'function'){ 4 window.onload = func(); 5 }else{ 6 window.onload = function(){ 7 oldonload(); 8 func(); 9 }; 10 } 11 }
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号