本文翻译youtube上的up主kudvenkat的javascript tutorial播放单

源地址在此:

https://www.youtube.com/watch?v=PMsVM7rjupU&list=PL6n9fhu94yhUA99nOsJkKXBqokT3MBK0b

本次的视频主要讨论使用Javascript的弱势之处以及不利的地方

Javascript主要有两个弱点:

安全性:Javascript是在客户端机器上运行的.所以可能会有用户恶意使用javascript来做一些不好的事情,比如追踪你的浏览历史记录,盗取你的密码等等.这是人们倾向于禁用Javascript的主要原因之一

浏览器兼容性:不是所有的浏览器都用同样的规则来处理同一份Javascript代码.这就意味着,功能和用户界面也会因为浏览器的不同而不同.这就是为什么跨浏览器测试这么重要的原因.但是,Javascript的库比如jQuery让这个问题不再那么头痛.

Javascript浏览器兼容性例子

例子1:innerText属性被IE和Chrome支持,但是不被Firefox支持.这就意味着ValidatForm()这个我们在第一部分做过的函数只会在IE和Chrome下工作,Firefox下则不会

  1. function ValidatForm()
  2. {
  3. var ret = true;
  4. if (document.getElementById("txtFirstName").value == "")
  5. {
  6. document.getElementById("lblFirstName").innerText = "First Name is required";
  7. ret = false;
  8. }
  9. else
  10. {
  11. document.getElementById("lblFirstName").innerText = "";
  12. }
  13.  
  14. if (document.getElementById("txtLastName").value == "")
  15. {
  16. document.getElementById("lblLastName").innerText = "Last Name is required";
  17. ret = false;
  18. }
  19. else
  20. {
  21. document.getElementById("lblLastName").innerText = "";
  22. }
  23.  
  24. if (document.getElementById("txtEmail").value == "")
  25. {
  26. document.getElementById("lblEmail").innerText = "Email is required";
  27. ret = false;
  28. }
  29. else
  30. {
  31. document.getElementById("lblEmail").innerText = "";
  32. }
  33.  
  34. return ret;
  35. }

要让以上代码在IE,Chrome或者Firefox下都能工作的话,需要用textContent替换掉innerText属性,如下所示:

  1. function ValidatForm()
  2. {
  3. var ret = true;
  4. if (document.getElementById("txtFirstName").value == "")
  5. {
  6. document.getElementById("lblFirstName").textContent = "First Name is required";
  7. ret = false;
  8. }
  9. else
  10. {
  11. document.getElementById("lblFirstName").textContent = "";
  12. }
  13.  
  14. if (document.getElementById("txtLastName").value == "")
  15. {
  16. document.getElementById("lblLastName").textContent = "Last Name is required";
  17. ret = false;
  18. }
  19. else
  20. {
  21. document.getElementById("lblLastName").textContent = "";
  22. }
  23.  
  24. if (document.getElementById("txtEmail").value == "")
  25. {
  26. document.getElementById("lblEmail").textContent = "Email is required";
  27. ret = false;
  28. }
  29. else
  30. {
  31. document.getElementById("lblEmail").textContent = "";
  32. }
  33.  
  34. return ret;
  35. }

例子2: 下面的ddlGenderSelectionChanged()只在Chrome和Firefox下工作,但是IE则无法识别该函数

  1. [!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml..."]
  2.  
  3. [html xmlns="http://www.w3.org/1999/xhtml"]
  4. [head runat="server"]
  5. [title][/title]
  6. [script type="text/javascript" language="javascript"]
  7. function ddlGenderSelectionChanged()
  8. {
  9. alert('You selected ' + ddlGender.value);
  10. }
  11. [/script]
  12. [/head]
  13. [body]
  14. [form id="form1" runat="server"]
  15. [div]
  16. [select id="ddlGender" onchange="ddlGenderSelectionChanged()"]
  17. [option]Male[/option]
  18. [option]Female[/option]
  19. [/select]
  20. [/div]
  21. [/form]
  22. [/body]
  23. [/html]

要让这个Javascript函数在所有浏览器中都可用,我们需要做如下调整

  1. [script type="text/javascript" language="javascript"]
  2. function ddlGenderSelectionChanged()
  3. {
  4. alert('You selected ' + document.getElementById('ddlGender').value);
  5. }
  6. [/script]

[译]Javascript的弱点的更多相关文章

  1. [译]JavaScript需要类吗?

    [译]JavaScript需要类吗?   原文:http://www.nczonline.net/blog/2012/10/16/does-javascript-need-classes/ 译者注:在 ...

  2. [译]JavaScript源码转换:非破坏式与再生式

    原文:http://ariya.ofilabs.com/2013/06/javascript-source-transformation-non-destructive-vs-regenerative ...

  3. [译]JavaScript规范-葵花宝典

    [译]JavaScript规范 译自:https://github.com/airbnb/javascript 类型 原始值: 相当于传值 string number boolean null und ...

  4. [译]JavaScript:将字符串两边的双引号转换成单引号

    原文:http://ariya.ofilabs.com/2012/02/from-double-quotes-to-single-quotes.html 代码的不一致性总是让人发狂,如果每位开发者都能 ...

  5. [译]JavaScript中,{}+{}等于多少?

    最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得 ...

  6. [译]JavaScript:函数的作用域链

    原文:http://blogs.msdn.com/b/jscript/archive/2007/07/26/scope-chain-of-jscript-functions.aspx 在JavaScr ...

  7. [译]JavaScript检测浏览器前缀

    原文地址: Detect Vendor Prefix with JavaScript 不管浏览器私有前缀的现状如何,我们还是要与之为伴,并且有时候还需要利用它来做一些事情.这些前缀可以用于CSS(比如 ...

  8. [译]JavaScript insertAdjacentHTML

    原文地址:http://davidwalsh.name/insertadjacenthtml-beforeend 该死的DOM慢的很.随着我们的网站动态交互和Ajax操作越来越多,我们需要寻找一种高性 ...

  9. [译]JavaScript 错误和处理

    JavaScript的调试是一个噩梦:一些错误刚开始很难理解,并且给出的错误函数也经常是没用的.如果把错误都列出来并给出解决办法会不会很有用呢. 下面列出了JavaScript一系列的奇怪错误.对于同 ...

随机推荐

  1. [Luogu2371][国家集训队]墨墨的等式

    luogu 题意 给出\(n,a_i,B_{min},B_{max}\),求使得\(a_1x_1+a_2x_2+...+a_nx_n=B\)存在一组非负整数解的\(B\in[B_{min},B_{ma ...

  2. C#:使用UPnP来穿透NAT使内网接口对外网可见

    在写完Object 672后,软件的一个致命问题暴露出来,如果服务器和客户端都在内网环境下,即双方都通过NAT来接触外网,那么此时客户端是无法直接和服务器交流的. 解决方案可以是: 1:把服务器部署在 ...

  3. Xml日志记录文件最优方案(附源代码)

    Xml作为数据存储的一种方式,当数据非常大的时候,我们将碰到很多Xml处理的问题.通常,我们对Xml文件进行编辑的最直接的方式是将xml文件加载到XmlDocument,在内存中来对XmlDocume ...

  4. bzoj 4300 绝世好题——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4300 考虑 dp[ i ] 能从哪些 j 转移过来,就是那些 a[ j ] & a[ ...

  5. 14.Selenium+Python使用火狐浏览器问题解决

    一开始使用的是IE浏览器作为自动化浏览器,但是由于想学习无头模式,故选择FireFox作为浏览器,以下是遇到的相关问题: 1.简单代码 from selenium import webdriver d ...

  6. check: 获得所有呗选中的checked标签的元素值 mapArrayElement(arrEles)

    首先引用: <script src="../js/myjs/mapArrayElement.js"></script> 然后在<javascript& ...

  7. 【转】LTE-NAS过程学习总结

    为了从网络得到非接入层服务,网络中非接入层节点必须知道有关UE的信息.为了这个目的,UE不得不发起附属过程,该过程是在UE开机和初始接入网络时必须被执行的. 一旦该过程成功,MME上就会建立好一个该U ...

  8. sql语句中GROUP BY 和 HAVING的使用 count()

    在介绍GROUP BY 和 HAVING 子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数, 例如SUM, COUNT, MAX, AVG等.这些函数和其它函数的根本区别就是它们一般作用在多 ...

  9. canvas路径绘制

    惯例,先贴代码: 1 /** 2 * Created by Administrator on 2016/1/27. 3 */ 4 function draw (id){ 5 var canvas = ...

  10. 某个应用使cpu使用率100%

    --CPU使用率 Linux是一个多任务的操作系统,将每个cpu的时间划分为很短的时间片,再通过调度器轮流分配给各个任务使用,因此造成多任务同时运行的错觉 为了维护cpu时间,linux通过事先定义的 ...