本文翻译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下则不会

function ValidatForm()
{
var ret = true;
if (document.getElementById("txtFirstName").value == "")
{
document.getElementById("lblFirstName").innerText = "First Name is required";
ret = false;
}
else
{
document.getElementById("lblFirstName").innerText = "";
} if (document.getElementById("txtLastName").value == "")
{
document.getElementById("lblLastName").innerText = "Last Name is required";
ret = false;
}
else
{
document.getElementById("lblLastName").innerText = "";
} if (document.getElementById("txtEmail").value == "")
{
document.getElementById("lblEmail").innerText = "Email is required";
ret = false;
}
else
{
document.getElementById("lblEmail").innerText = "";
} return ret;
}

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

function ValidatForm()
{
var ret = true;
if (document.getElementById("txtFirstName").value == "")
{
document.getElementById("lblFirstName").textContent = "First Name is required";
ret = false;
}
else
{
document.getElementById("lblFirstName").textContent = "";
} if (document.getElementById("txtLastName").value == "")
{
document.getElementById("lblLastName").textContent = "Last Name is required";
ret = false;
}
else
{
document.getElementById("lblLastName").textContent = "";
} if (document.getElementById("txtEmail").value == "")
{
document.getElementById("lblEmail").textContent = "Email is required";
ret = false;
}
else
{
document.getElementById("lblEmail").textContent = "";
} return ret;
}

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

[!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml..."]

[html xmlns="http://www.w3.org/1999/xhtml"]
[head runat="server"]
[title][/title]
[script type="text/javascript" language="javascript"]
function ddlGenderSelectionChanged()
{
alert('You selected ' + ddlGender.value);
}
[/script]
[/head]
[body]
[form id="form1" runat="server"]
[div]
[select id="ddlGender" onchange="ddlGenderSelectionChanged()"]
[option]Male[/option]
[option]Female[/option]
[/select]
[/div]
[/form]
[/body]
[/html]

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

[script type="text/javascript" language="javascript"]
function ddlGenderSelectionChanged()
{
alert('You selected ' + document.getElementById('ddlGender').value);
}
[/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. java多线程 生产者消费者案例-虚假唤醒

    package com.java.juc; public class TestProductAndConsumer { public static void main(String[] args) { ...

  2. 洛谷 P3223 [HNOI2012]排队

    题目描述 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不同的) 输入输 ...

  3. Oracle中查询前10条记录

    在Oracle怎样查询表中的top10条记录呢? select * from test where rownum <=10     ----说明:rownum只能用于<或<=运算,如 ...

  4. [转]NME Android目标中文输入问题完美解决!

    最近研究了一下haxe,发现蛮牛逼的,转几篇知识帖 haXe开发笔记:中文问题的小结 * .hx源文件中如果包含中文,要保存成UTF-8编码才能够正确被haXe编译器解析,是否包含BOM(Byte O ...

  5. bzoj 4827 [Hnoi2017]礼物——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c ...

  6. BZOJ1116:[POI2008]CLO

    浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...

  7. emacs复制粘贴和查找撤销

    在emacs下复制粘贴是这样的.1.在任一行中按下ctrl+space键,最底行会显示 Mark set 表示已经开始标记了.2.移动鼠标或者选中文字然后,可以有两种方式:Alt+w (复制) 或者  ...

  8. sourcetree 安装与操作

    sourcetree操作 http://www.jianshu.com/p/be9f0484af9d SourceTree安装教程和GitLab配置详解 http://www.cnblogs.com/ ...

  9. Mstar 编译器的搭建

    机顶盒: 1.解压“mipsisa32-elf-3.4.4-20101123.i386linux.tar.gz" 应用编译器 2.mips-4.3-51-mips-linux-gnu-i68 ...

  10. MongoTemplate聚合操作

    Aggregation简单来说,就是提供数据统计.分析.分类的方法,这与mapreduce有异曲同工之处,只不过mongodb做了更多的封装与优化,让数据操作更加便捷和易用.Aggregation操作 ...