整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

html常用代码大全

.结构性定义

文件类型 <HTML></HTML> (放在档案的开头与结尾)

文件主题 <TITLE></TITLE> (必须放在「文头」区块内)

文头 <HEAD></HEAD> (描述性资料,像是「主题」)

文体 <BODY></BODY> (文件本体)

(由浏览器控制的显示风格)

标题 <H?></H?> (从1到6,有六层选择)

标题的对齐 <H? ALIGN=LEFT|CENTER|RIGHT></H?>

区分 <DIV></DIV>

区分的对齐 <DIV ALIGN=LEFT|RIGHT|CENTER|JUSTIFY></DIV>

引文区块 <BLOCKQUOTE></BLOCKQUOTE> (通常会内缩)

强调 <EM></EM> (通常会以斜体显示)

特别强调 <STRONG></STRONG> (通常会以加粗显示)

引文 <CITE></CITE> (通常会以斜体显示)

码 <CODE></CODE> (显示原始码之用)

样本 <SAMP></SAMP>

键盘输入 <KBD></KBD>

变数 <VAR></VAR>

定义 <DFN></DFN> (有些浏览器不提供)

地址 <ADDRESS></ADDRESS>

大字 <BIG></BIG>

小字 <SMALL></SMALL>

与外观相关的标签(作者自订的表现方式)

加粗 <B></B>

斜体 <I></I>

底线 <U></U> (尚有些浏览器不提供)

删除线 <S></S> (尚有些浏览器不提供)

下标 <SUB></SUB>

上标 <SUP></SUP>

打字机体 <TT></TT> (用单空格字型显示)

预定格式 <PRE></PRE> (保留文件中空格的大小)

预定格式的宽度 <PRE WIDTH=?></PRE>(以字元计算)

向中看齐 <CENTER></CENTER> (文字与图片都可以)

闪耀 <BLINK></BLINK> (有史以来最被嘲弄的标签)

字体大小 <FONT SIZE=?></FONT>(从1到7)

改变字体大小 <FONT SIZE=+|-?></FONT>

基本字体大小 <BASEFONT SIZE=?> (从1到7; 内定为3)

字体颜色 <FONT COLOR="#$$$$$$"></FONT>

说明 <!-- *** --> (浏览器不会显示)

<!--修改滚动条-->

<style type="text/css">

body {

scrollbar-face-color: #330033;

scrollbar-shadow-color: #FFFFFF;

scrollbar-highlight-color: #FFFFFF;

scrollbar-3dlight-color: #FFFFFF;

scrollbar-darkshadow-color: #FFFFFF;

scrollbar-track-color: #330033;

scrollbar-arrow-color: #FFFFFF;

}

</style>

<!--修改滚动条结束-->

将上面的代码放在叶子代码的<head></head>之间,颜色可根据自己的需要修改。

滚动条的代码意思如下:

Scrollbar-Face-Color为滚动条表面颜色设定;

Scrollbar-Track-Color为滚动条底板颜色设定;

Scrollbar-Darkshadow为滚动条下边和右边边沿颜色设定;

Scrollbar-Highlight-Color为滚动条上斜面和左斜面颜色设定;

Scrollbar-Shadow-Color为滚动条下斜面和右斜面颜色设定;

Scrollbar-3Dlight-Color为滚动条上边和左边的边沿颜色设定;

Scrollbar-Arrow-Color为滚动条两端箭头颜色设定。

<!> 跑馬燈

<marquee>...</marquee>普通捲動

<marquee behavior=slide>...</marquee>滑動

<marquee behavior=scroll>...</marquee>預設捲動

<marquee behavior=alternate>...</marquee>來回捲動

<marquee direction=down>...</marquee>向下捲動

<marquee direction=up>...</marquee>向上捲動

<marquee direction=right></marquee>向右捲動

<marquee direction=’left’></marquee>向左捲動

<marquee loop=2>...</marquee>捲動次數

<marquee width=180>...</marquee>設定寬度

<marquee height=30>...</marquee>設定高度

<marquee bgcolor=FF0000>...</marquee>設定背景顏色

<marquee scrollamount=30>...</marquee>設定捲動距離

<marquee scrolldelay=300>...</marquee>設定捲動時間

1)贴图:<img src="图片地址">

2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a>

3)在新窗口打开连接:<a href="相关地址" target="_blank">写上要写的字</a>

4)移动字体(走马灯):<marquee>写上你想写的字</marquee>

5)字体加粗:<b>写上你想写的字</b>

6)字体斜体:<i>写上你想写的字</i>

7)字体下划线: <u>写上你想写的字</u>

8)字体删除线: <s>写上你想写的字</s>

9)字体加大: <big>写上你想写的字</big>

10)字体控制大小:<h1>写上你想写的字</h1> (其中字体大小可从h1-h5,h1最大,h5最小)

11)更改字体颜色:<font color="#value">写上你想写的字</font>(其中value值在000000与ffffff(16位进制)之间

12)消除连接的下划线:<a href="相关地址" style="text-decoration:none">写上你想写的字</a>

13)贴音乐:<embed src="音乐地址" width="宽度" height="高度" autostart=false>

14)贴flash: <embed src="flash地址" width="宽度" height="高度">

15)贴影视文件:<img dynsrc="文件地址" width="宽度" height="高度" start=mouseover>

16)换行:<br>

17)段落:<p>段落</p>

18)原始文字样式:<pre>正文</pre>

19)换帖子背景:<body background="背景图片地址">

20)固定帖子背景不随滚动条滚动:<body background="背景图片地址" body

bgproperties=fixed>

21)定制帖子背景颜色:<body bgcolor="#value">(value值见10)

22)帖子背景音乐:<bgsound="背景音乐地址" loop=infinite>

23)贴网页:<iframe. src="相关地址" width="宽度" height="高度"></iframe>

1、店铺音乐代码:音乐网址" loop="-1">

2、图片制作代码:<img src="这里放图片地址">

3、公告图片代码:<img border="0" src="这里放图片地址" />或<img src="这里放图片地址"/>

4、悬浮挂饰代码:<img src="这里放图片地址" style="left:20px; position: relative; top:0px" />

5、商品分类代码:<img src="这里放图片地址"/>

6、字体大小代码:<font size="2">这里放要处理的文字,可用3、4、5等设置大小</font>

7、字体颜色代码:<font color="red">这里放要处理的文字,可以换成blue,yellow等</font>

8、文字链接代码:<a href="网页地址">链接的文字,在分类栏里用时链接的网页地址必须缩短</a>

9、移动文字代码:<marquee>从右到左移动的文字</marquee>

10、背景音乐代码:<bgsound loop="-1" src="这里放音乐地址"></bgsound>

11、图片附加音乐代码:<img border=0 src="这里放图片地址" dynsrc="这里放音乐地址">

12、浮动图片代码:<img alt="1" height="150" src="这里放图片地址"/>

公告图片的代码:公告挂饰:店铺分类代码:背景音乐代码:换行代码

计数器代码颜色代码:

1白色 #FFFFFF

2红色#FF0000

3绿色#00FF00

4蓝色#0000FF

5牡丹红#FF00FF

6青色 #00FFFF

7黄色#FFFF00

8黑色#000000

9海蓝#70DB93

10巧克力色#5C3317

11蓝紫色 #9F5F9F

12黄铜色#B5A642

13亮金色#D9D919

14棕色#A67D3D

15青铜色 #8C7853

162号青铜色 #A67D3D

17士官服蓝色 #5F9F9F

18冷铜色 #D98719

19铜色 #B87333

20珊瑚红 #FF7F00

21紫蓝色 #42426F

22深棕 #5C4033

23深绿 #2F4F2F

24深铜绿色 #4A766E

25深橄榄绿 #4F4F2F

26深兰花色 #9932CD

27深紫色 #871F78

28深石板蓝 #6B238E

29深铅灰色 #2F4F4F

30深棕褐色 #97694F

32深绿松石色 #7093DB

33暗木色 #855E42

34淡灰色 #545454

35土灰玫瑰红色 #856363

36长石色 #D19275

37火砖色#8E2323

38森林绿 #238E23

39金色 #CD7F32

40鲜黄色 #DBDB70

41灰色 #C0C0C0

42铜绿色 #527F76

43青黄色 #93DB70

44猎人绿 #215E21

45印度红 #4E2F2F

46土黄色 #9F9F5F

47浅蓝色 #C0D9D9

48浅灰色 #A8A8A8

49浅钢蓝色 #8F8FBD

59浅木色 #E9C2A6

60石灰绿色 #32CD32

61桔黄色 #E47833

62褐红色 #8E236B

63中海蓝色 #32CD99

64中蓝色 #3232CD

65中森林绿 #6B8E23

66中鲜黄色 #EAEAAE

67中兰花色 #9370DB

68中海绿色 #426F42

69中石板蓝色 #7F00FF

70中春绿色 #7FFF00

71中绿松石色 #70DBDB

72中紫红色 #DB7093

73中木色 #A68064

74深藏青色 #2F2F4F

75海军蓝 #23238E

76霓虹篮 #4D4DFF

77霓虹粉红 #FF6EC7

78新深藏青色 #00009C

79新棕褐色 #EBC79E

80暗金黄色 #CFB53B

81橙色 #FF7F00

82橙红色 #FF2400

83淡紫色 #DB70DB

84浅绿色 #8FBC8F

85粉红色 #BC8F8F

86李子色 #EAADEA

87石英色 #D9D9F3

88艳蓝色 #5959AB

89鲑鱼色 #6F4242

90猩红色 #BC1717

91海绿色 #238E68

92半甜巧克力色 #6B4226

93赭色 #8E6B23

94银色 #E6E8FA

95天蓝 #3299CC

96石板蓝 #007FFF

97艳粉红色 #FF1CAE

98春绿色 #00FF7F

99钢蓝色 #236B8E

100亮天蓝色 #38B0DE

101棕褐色 #DB9370

102紫红色 #D8BFD8

103石板蓝色 #ADEAEA

104浓深棕色 #5C4033

105淡浅灰色 #CDCDCD

106紫罗兰色 #4F2F4F

107紫罗兰红色 #CC3299

108麦黄色#D8D8BF

109黄绿色 #99CC32

简单常用HTML代码大全(修改网页必备)

网页常用HTML代码大全

超链接,用的最多:

点击在当前页打开网站

<a href="http://www.88wan.com/">这是我的网站</a>

效果:这是我的网站

点击弹出网站

<a href="http://www.88wan.com/" target="_blank">这是我的网站</a>

<br>这个是向下一行,比如

欢迎光临我的网站<br>希望开心

演示效果就是:

欢迎光临我的网站

希望开心

<p>向下一大行,比如

欢迎光临我的网站<p>希望开心

演示效果就是:

欢迎光临我的网站

希望开心

<b>这是粗体字

比如 <b >我的网站</ b>

演示效果:我的网站

我的网站这是字体的颜色BLUE是蓝,RED是红

演示

忽视右键

<body >

<body style="overflow-y:hidden">

如何几秒后转到别的页面?

<META. HTTP-EQUIV="Refresh" C>

点击关闭窗口

<a href="javascript.:top.window.close();">点击关闭窗口</a>!

请问如何去掉主页右面的滚动条?

<body scroll="no">

<body style="overflow-y:hidden">

如何做到让一个网页自动关闭.

<html>

<head>

<OBJECT id=closes type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

<param name="Command" value="Close">

</object>

</head>

<body >

这个窗口会在10秒过后自动关闭,而且不会出现提示. </body>

如何在不刷新页面的情况下刷新css?

<style>

button{ color:#000000;}

</style>

<button nclick=document.styleSheets[0].rules[0].style.color=‘‘‘‘red‘‘‘‘>点击按钮直接修改style标签里button选择符使按钮改为红色</button>

请问如何让网页自动刷新?

在head部记入<META. HTTP-EQUIV="Refresh" c>其中20为20秒后自动刷新,你可以更改为任意值。

如何让页面自动刷新?

方法一,用refresh

HTML 代码片段如下:

<head>

<meta. http-equiv="refresh" c>

</head>

5表示刷新时间

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

方法二,使用setTimeout控制

<img src=/logo.gif>

<script>

function rl(){

document.location.reload()

}

setTimeout(rl,2000)

</script>

如何让超链接没有下划线

在源代码中的<HEAD>…</HEAD>之间输入如下代码:

<style. type="text/css"> <!--

a { text-decoration: none}

--> </style>

请问如何去掉IE的上下滚动条?

<body style=‘‘‘‘overflow:scroll;overflow-y:hidden‘‘‘‘>

</body>

怎样才能把RealPlayer文件在网页做一个试听连接?

<embed height=25 src=51js.rm type=audio/x-pn-realaudio-plugin width=50 autostart="false" c>

如何用html实现浏览器上后退按钮的功能?

<a href="java script.:history.go(-1)">点击后退</a>

或者

<script> history.back() </script>

请问怎么在网页中改变鼠标的箭头形状?

HTML 代码片段如下:

<body>

<a href="#" style="cursor: auto;">auto</a><br>

<a href="#" style="cursor: crosshair ">crosshair </a><br>

<a href="#" style="cursor: default ">default </a><br>

<a href="#" style="cursor: hand ">hand </a><br>

<a href="#" style="cursor: move ">move </a><br>

<a href="#" style="cursor: e-resize ">e-resize </a><br>

<a href="#" style="cursor: ne-resize ">ne-resize </a><br>

<a href="#" style="cursor: nw-resize">nw-resize</a><br>

<a href="#" style="cursor: n-resize">n-resize</a><br>

<a href="#" style="cursor: se-resize">se-resize</a><br>

<a href="#" style="cursor: sw-resize">sw-resize</a><br>

<a href="#" style="cursor: s-resize">s-resize</a><br>

<a href="#" style="cursor: w-resize">w-resize</a><br>

<a href="#" style="cursor: text">text</a><br>

<a href="#" style="cursor: wait">wait</a><br>

<a href="#" style="cursor: help">help</a><br>

</body>

怎样不使用页面的缓存?即每一次打开页面时不是调用缓存中的东西

<META. HTTP-EQUIV="

ragma" C>

页面打开时自动弹出一个窗口的代码怎么写?

HTML 代码片段如下:

<html>

<head>

<title>Untitled Document</title>

<meta. http-equiv="Content-Type" c>

<script. language="<B style="color:black;background-color:#A0FFFF">javascript</B>">

<!--

function MM_openBrWindow(theURL,winName,features) { //v2.0

 window.open(theURL,winName,features);

}

//-->

</script>

</head>

<body bgcolor="#FFFFFF" text="#000000" >

</body>

</html>

如何让我的页面出现一个会讲话的小人?Merlin

HTML 代码片段如下:

<HTML>

<HEAD>

<TITLE>默林</TITLE>

<META. http-equiv=Content-Type c>

</HEAD>

<BODY>

<p><OBJECT id=sims classid=CLSID

45FD31B-5C6E-11D1-9EC1-00C04FD7081F>

 </OBJECT>

 <SCRIPT>

var MerlinID;

var MerlinACS;

sims.Connected = true;

MerlinLoaded = LoadLocalAgent(MerlinID, MerlinACS);

Merlin = sims.Characters.Character(MerlinID);

Merlin.Show();

Merlin.Play("Surprised");

Merlin.Speak("大家好");

Merlin.Play("GestureLeft");

Merlin.Think("我是默林!");

Merlin.Play("

leased");

Merlin.Think("可爱吗?");

Merlin.Play("GestureDown");

Merlin.Speak("哈哈!");

Merlin.Hide();

function LoadLocalAgent(CharID, CharACS){

LoadReq = sims.Characters.Load(CharID, CharACS);

return(true);

}

</SCRIPT>

</p>

<p> </p>

<p>看此效果必须装有office2000!!!</p>

</BODY>

</HTML>

在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

HTML 代码片段如下:

<html><head>

<STYLE>

body  {background-image:url(logo.gif);

background-repeat:no-repeat; background-position:center }

</STYLE>

</head>

<body bgproperties="fixed" >

</body>

</html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

background-repeat:no-repeat; 是讓背景圖不占滿整個頁面

body bgproperties="fixed" 是拉動scroll時背景圖不動

文本输入框什么属性能实现不可输入?

HTML 代码片段如下:

<input type="text" name="textfield" disabled>

或者

<input type="text" name="textfield" readonly>

如何禁止自己的页面在别人的框架里打开?

把以下代码加至你的<head>区

<script>

if (window.top!=self){

window.top.location=self.location

}

</script>

如何实现首页全屏幕显示?

HTML 代码片段如下:

<html>

<body><script. language="<B style="color:black;background-color:#A0FFFF">javascript</B>">

var coolw=642

var coolh=400

var coolhuang=window.open("http://www.51js.com","coolhuang","width="+coolw+",height="+coolh+",

fullscreen=1,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0")

window.close()

</script></body></html>

如何监听一个窗口被关闭了?

HTML 代码片段如下:

<body >

如何禁止Ctrl+N?

HTML 代码片段如下:

<body nkeydown=return(!(event.keyCode==78&&event.ctrlKey))>

如何把页面加入用户的收藏夹?

HTML 代码片段如下:

<a href="<B style="color:black;background-color:#A0FFFF">javascript</B>:window.external.AddFavorite(‘‘‘‘http://www.51js.com‘‘‘‘,‘‘‘‘无忧脚本‘‘‘‘)">收藏无忧脚本</a>

如何在我的页面中加入背景音乐?

IE: <bgsound src="*.mid" loop=infinite>

NS:<embed src="*.mid" autostart=true hidden=true loop=true>

*.mid你的背景音乐的midi格式文件

关于页面转换效果

<meta. http-equiv="page-enter" c>

<meta. http-equiv="page-exit" c>

说明:Transition=23是随机效果,另可以选0-22任一数字固定某个效果

如何设定打开页面的大小

HTML 代码片段如下:

<body ><!--(width,height)-->

怎样双击滚屏,单击停止?

HTML 代码片段如下:

<html>

<head>

<title>新網頁1</title>

</head>

<body>

<script. language"<B style="color:black;background-color:#A0FFFF">javascript</B>">

var currentpos,timer;

function initialize()

{

timer=setInterval("scrollwindow()",10);

}

function sc(){

clearInterval(timer);

}

function scrollwindow()

{

currentpos=document.body.scrollTop;

window.scroll(0,++currentpos);

if (currentpos != document.body.scrollTop)

sc();

}

document.onmousedown=sc

document.ondblclick=initialize

</script>

<p>a</p><p>a</p><p>a</p><p>aa</p><p>aa</p><p>aa</p>

<p>aa</p><p>aa</p><p>aa</p><p>aa</p><p>aa</p><p>aa</p>

<p>aa</p><p>aa</p><p>aa</p><p>aa</p><p>aa</p><p>aa</p>

<p>aa</p><p>aa</p><p>aa</p><p>aa</p><p>a</p>

</body>

</html>

如何让body中的文字不被选中?

HTML 代码片段如下:

<body >aaa</body>

如何让弹出的窗口不能关闭?

在新开的窗口中加入如下代码

<body nunload=open(location.href)>

</body>

如何让浏览器在保存页面时保存失败?

HTML 代码片段如下:

<NOSCRIPT>

<<B style="color:black;background-color:#ffff66">IFRAME</B> SRC="*.html">

</<B style="color:black;background-color:#ffff66">IFRAME</B>>

</NOSCRIPT>

表单中如何用图片按钮实现 reset?

<html>

<head>

<script>

function aaa(){

document.forms[0].reset()

}

</script>

</head>

<body>

<form>

<textarea rows="2" name="S1" cols="20"></textarea>

<input type="submit" values="提交" name="B1">

<image src="logo.gif" nclick=aaa()>

</form>

</body></html>

进入网页时弹出的信息对话框

<body >

关闭窗口后弹出对话框

<body >

告别提示

<body nUnload= alert("再见,感谢你的访问!")>

只要你肯干,没有什么不能成功的.

1。忽视右键

  <body ncontextmenu="return false">

  <body style="overflow-y:hidden">

2。加入背景音乐

  IE:<bgsound src="*.mid" loop=infinite>

  NS:<embed src="*.mid" autostart=true hidden=true loop=true>

  </embed>

  *.mid你的背景音乐的midi格式文件

3。简单的window.open方法

  <a href="#"

  nclick="javascript:window.open(文件路径/文件名,newwindow,

  toolbar=no,scrollbars=yes,resizable=no,top=0,left=0,

  width=400,height=300);">文字或图片</a>

参数解释:

  <SCRIPT. LANGUAGE="javascript"> js脚本开始;

  window.open 弹出新窗口的命令;

文件路径/文件名 弹出窗口的文件名;

  newwindow 弹出窗口的名字(不是文件名),非必须,可用空代替;

  width=400 窗口宽度;

  height=300 窗口高度;

  top=0 窗口距离屏幕上方的象素值;

  left=0 窗口距离屏幕左侧的象素值;

  toolbar=no 是否显示工具栏,yes为显示;

  menubar,scrollbars 表示菜单栏和滚动栏。

  resizable=no 是否允许改变窗口大小,yes为允许;

  location=no 是否显示地址栏,yes为允许;

  status=no 是否显示状态栏内的信息(通常是文件已经打开),yes为允许;

  </SCRIPT> js脚本结束

4。简单的页面加密

  <script. LANGUAGE="javascript">

  <!--

  function loopy(){

var sWord ="";

while(sWord!="login"){sWord=prompt("请输入你的登陆密码");}

alert("登陆成功!");

  }

  loopy()

  //-->

  </script>

5。拉动页面时背景图不动

  <style>

  body{background-image:url(logo.gif);

  background-repeat:no-repeat;background-position:center}

  </style>

6。让浏览器在保存页面时保存失败

  <NOSCRIPT><iframe. src="*.html"></iframe></NOSCRIPT>

7。随机替换图片

  <script>

  document.write(<img src="img/+parseInt(Math.random()*(5))

  +.gif"height="40" width="50">

  </script>

图片文件名为0.gif 1.gif 2.gif 3.gif 4.gif

8。窗口定时关闭

先将如下代码网页文件的区:

  <script. language="javascript">

  function closeit() { setTimeout("self.close()",10000) //毫秒 }

  </script>

然后再在<body>标内加入如:<body nload="closeit()">

9。网页自动关闭

  <html>

  <head>

  <object id=closes type="application/x-oleobject"

  classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">

  <param name="Command" value="Close">

  </object>

  </head>

  <body nload="window.setTimeout(closes.Click(),10000)">

这个窗口会在10秒过后自动关闭,而且不会出现提示.

  </body>

  </html>

10。网页自动刷新

在head部记入

  <META. HTTP-EQUIV="Refresh" content="20">

其中20为20秒后自动刷新,你可以更改为任意值。

11。网页自动转页

  <META. HTTP-EQUIV="Refresh" CONTENT="时间(秒);URL=地址">

12。保持layer在最前面,而不被Iframe、Object所覆盖

在Layer中再插Iframe. 或 Object 设z-Index值

  <div z-Index:2><object xxx></object> # 前面

  <div z-Index:1><object xxx></object> # 后面

  <div id="Layer2" style="position:absolute; top:40;width:400px;

  height:95px;z-index:2"> height=100% width=100%>

  <iframe. width=0 height=0></iframe>

  </div>

  <div id="Layer1" style="position:absolute; top:50;width:200px;

  height:115px;z-index:1">

  <iframe. height=100% width=100%></iframe>

  </div>

13。返回上一页

  <a href=javascript:history.back(1)>『返回上一页』</a>

14。关闭窗口

  <a href=javascript:self.close()>『关闭窗口』</a>

15。关于iframe的透明背景

  <IFRAME. ID="iFrame1" SRC="iframe.htm"

  allowTransparency="true"

  style="background-color: green"></IFRAME>

16. ncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键

<table border ncontextmenu=return(false)><td>no</table> 可用于Table

17. <body nselectstart="return false"> 取消选取、防止复制

18.onpaste="return false" 不准粘贴

19.oncopy="return false;" ncut="return false;" 防止复制

20. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标

21. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标

22. <input style="ime-mode:disabled"> 关闭输入法

23. 永远都会带着框架

<script. language="JavaScript"><!--

if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页

// --></script>

24. 防止被人frame.

<SCRIPT. LANGUAGE=JAVASCRIPT><!--

if (top.location != self.location)top.location=self.location;

// --></SCRIPT>

25. 网页将不能被另存为

<noscript><iframe. src=*.html></iframe></noscript>

26. 查看网页源代码

<input type=button value=查看网页源代码

onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">

27.删除时确认

<a href="javascript:if(confirm("确实要删除吗?"))location="boos.asp? &areyou=删除&page=1"">删除</a>

28.屏蔽功能键Shift,Alt,Ctrl

<script>

function look(){

if(event.shiftKey)

alert("禁止按Shift键!"); //可以换成ALT CTRL

}

document.onkeydown=look;

</script>

29. 网页不会被缓存

<META. HTTP-EQUIV="pragma" CONTENT="no-cache">

<META. HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">

<META. HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">

或者<META. HTTP-EQUIV="expires" CONTENT="0">

30.怎样让表单没有凹凸感?

<input type=text style="border:1 solid #000000">

或 <input type=text style="border-left:none; border-right:none; border -top:none; border-bottom: 1 solid #000000"></textarea>

31.不要滚动条?

让竖条没有:

<body style="overflow:scroll;overflow-y:hidden">

</body>

让横条没有:

<body style="overflow:scroll;overflow-x:hidden">

</body>

两个都去掉?更简单了

<body scroll="no">

</body>

32.怎样去掉图片链接点击后,图片周围的虚线?

<a href="#" nFocus="this.blur()"><img src="logo.jpg" border=0></a>

33.电子邮件处理提交表单

<form. name="form1" method="post" action="mailt****@***.com" enctype="text/plain">

<input type=submit>

</form>

34.在打开的子窗口刷新父窗口的代码里如何写?

window.opener.location.reload()

35.如何设定打开页面的大小

<body nload="top.resizeTo(300,200);">

打开页面的位置<body nload="top.moveBy(300,200);">

36.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动

<STYLE>

body

{background-image:url(logo.gif); background-repeat:no-repeat;

background-position:center;background-attachment: fixed}

</STYLE>

37. 检查一段字符串是否全由数字组成

<script. language="Javascript"><!--

function checkNum(str){return str.match(//D/)==null}

alert(checkNum("1232142141"))

alert(checkNum("123214214a1"))

// --></script>

38. 获得一个窗口的大小

document.body.clientWidth; document.body.clientHeight

39. 怎么判断是否是字符

if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");

else alert("全是字符");

40.TEXTAREA自适应文字行数的多少

<textarea rows=1 name=s1 cols=27 npropertychange="this.style.posHeight=this.scrollHeight">

</textarea>

41. 日期减去天数等于第二个日期

<script. language=Javascript>

function cc(dd,dadd)

{

//可以加上错误处理

var a = new Date(dd)

a = a.valueOf()

a = a - dadd * 24 * 60 * 60 * 1000

a = new Date(a)

alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")

} cc("12/23/2002",2)

</script>

42. 选择了哪一个Radio

<HTML><script. language="vbscript">

function checkme()

for each ob in radio1

if ob.checked then window.alert ob.value

next

end function

</script><BODY>

<INPUT name="radio1" type="radio" value="style" checked>Style.

<INPUT name="radio1" type="radio" value="barcode">Barcode

<INPUT type="button" value="check" nclick="checkme()">

</BODY></HTML>

43.脚本永不出错

<SCRIPT. LANGUAGE="JavaScript">

<!-- Hide function killErrors(){return true;} window.onerror = killErrors; // -->

</SCRIPT>

44.ENTER键可以让光标移到下一个输入框

<input nkeydown="if(event.keyCode==13)event.keyCode=9">

45. 检测某个网站的链接速度:

把如下代码加入<body>区域中:

<script. language=Javascript>

tim=1

setInterval("tim++",100)

b=1

var autourl=new Array()

autourl[1]="www.njcatv.net"

autourl[2]="javacool.3322.net"

autourl[3]="www.sina.com.cn"

autourl[4]="www.nuaa.edu.cn"

autourl[5]="www.cctv.com"

function butt(){

document.write("<form. name=autof>")

for(var i=1;i<autourl.length;i++)

document.write("<input type=text name=txt"+i+" size=10 value=测试中

……> =》<input type=text

name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br>")

document.write("<input type=submit value=刷新></form>")

}

butt()

function auto(url){

document.forms[0]["url"+b].value=url

if(tim>200)

{document.forms[0]["txt"+b].value="链接超时"}

else

{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"} b++ }

function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+" width=1 height=1 nerror=auto("http://"+autourl+"")>")}

run()</script>

46. 各种样式的光标

auto :标准光标

default :标准箭头

hand :手形光标

wait :等待光标

text :I形光标

vertical-text :水平I形光标

no-drop :不可拖动光标

not-allowed :无效光标

help :?帮助光标

all-scroll :三角方向标

move :移动标

crosshair :十字标

e-resize

n-resize

nw-resize

w-resize

s-resize

se-resize

sw-resize

47、禁止鼠标右键,把Demo的图片全都设为表格的背景,表格的大小与图片的大小一样。这样做看起来是一样的,主要是防止鼠标经过图片时会出现另存的按钮。禁止鼠标右键的代码很简单:<script. LANGUAGE="JavaScript"> function click() { if (event.button==2) {alert('呵呵,不好意思,你甭想使用右键下载图片:)'); } } document.onmousedown=click</script>

1. 怎 样 定 义 网 页 语 言( 字 符 集)?

----在 制 作 网 页 过 程 中, 你 首 先 要 定 义 网 页 语 言, 以 便 访 问 者 浏 览 器 自 动 设 置 语 言, 而 我 们 用 所 见 即 所 得 的HTML 工 具 时, 都 没 有 注 意 到 这 个 问 题, 因 为 它 是 默 认 设 置。 要 设 置 的 语 言 可 以 在HTML 代 码 状 态 下 找 到:

$#@60; meta http -equiv="Content Type" content="text/html; charset=gb2312" $#@62;

----把charset=gb2312 改 换 成 其 它 语 言 代 码 即 可, 比 如 英 文:charset=en.

2. 怎 样 防 止 别 人 把 你 的 网 页 放 到 框 架 里?

----因 为 框 架(frame) 的 缘 故, 有 许 多 人 把 别 人 的 网 页 放 置 到 自 己 的 框 架 里, 使 之 成 为 自 己 的 一 页。 如 果你 要 防 止 别 人 这 样 做, 可 以 加 入 下 列JavaScript 代 码 即 可, 它 会 自 动 监 测, 然 后 跳 出 别 人 的 框 架。

$#@60; script language="javascript" $#@62;

??if (self != top) { top.location = self.location; }

$#@60; /script $#@62;

3. 怎 样 设 置 字 体?

----在 制 作 网 页 过 程 中, 大 家 都 喜 欢 使 用 漂 亮 的 字 体。 但 是, 如 果 访 客 浏 览 器 没 有 安 装 同 样 的 字 体, 看 到你 的 网 页 会 是 很 普 通 的 字 体。 如 何 防 止 这 种 情 况 出 现 呢? 大 家 知 道 字 体 设 置 的 标 签 是Font, 而 它 有 个 属性 是Face, 该 属 性 是 定 义 字 体 的, 你 可 以 这 样 设 置:, 访 客 的 浏 览 器 就 会 按 照Face 定 义 的 字 体 顺 序 设 置 已 安装 的 字 体。 目 前 动 态 主 页 有 种 技 术, 可 以 把 字 体 信 息 用 向 量 格 式 存 储, 然 后 利 用 访 客 本 身 机 器 含 有 的 公共 信 息 库 把 字 体 快 速 的 组 装 起 来, 这 样, 就 不 用 担 心 访 客 是 否 安 装 有 某 种 字 体 了。

4. 怎 样 在 网 页 中 加 入 注 释?

----在 共 同 开 发 网 页 中, 加 入 注 释 是 防 止 分 工 被 搞 混 淆 或 者 注 释 某 段 代 码 特 殊 的 含 加 入 注 释 的 格 式 是:

$#@60; ! - - Microsoft FrontPage 3.0 - - $#@62;。

5. 怎 样 测 试 浏 览 器 并 自 动 装 入 所 需 要 的 网 页?

----目 前 微 软 和 网 景 的 浏 览 器 并 不 能 完 全 兼 容 所 有 网 页, 有 的 在 某 种 浏 览 器 里 非 常 漂 亮, 而 用 其 它 浏 览 器查 看 时 却 一 团 糟。 如 果 你 需 要 测 试 浏 览 器, 可 以 加 入 以 下JavaScript 代 码 并 保 存 单 独 一 个 网 页:

$#@60; script LANGUAGE="JavaScript" $#@62;

function TestBrowser(){

ie = ((navigator.appName ==

"Microsoft Internet Explorer") & &

(parseInt(navigator.appVersion) $#@62;= 3 ))

ns = ((navigator.appName == "Netscape") & &

(parseInt(navigator.appVersion) $#@62;= 3 ))

if (ns) {

setTimeout(location.href="nn4.htm",10);

} else {

setTimeout(location.href="ie4.htm",10);

}

}

$#@60; /script $#@62;

实 例 请 参 考:

http://www.netease.com/~tiantao/test.htm

6. 怎 样 让 链 接 没 有 下 划 线?

----只 要 在 加 入 以 下 代 码, 所 有 链 接 就 都 没 有 下 划 线 了:

$#@60; style type="text/css" $#@62;

$#@60; ! - -

A{text -transform: none;

text -decoration: none ;}

a:hover { text -decoration:underline }

- - $#@62;

$#@60; /style $#@62;

7. 怎 样 在 网 页 中 加 入E-mail 链 接 并 显 示 预 定 的 主 题?

A HREF=mailto:lovett@163.net?subject=test

8. 怎 样 让 背 景 图 像 不 滚 动?

----Internet Explorer 浏 览 器 支 持 一 个Body 属 性Bgproperties, 它 可 以 让 背 景 不 滚 动。

$#@60; Body Background="c98.gif" Bgproperties="fixed" $#@62;

9. 怎 样 评 定 网 页 的 级 别?

----在IE4.0 浏 览 器 中, 有 一 项 功 能 是 过 滤 网 站 的, 一 些 受 限 制 的 网 站 被 过 滤 掉, 而 该 网 站 必 须 被RSAC( 美 国娱 乐 委 员 会) 评 定 了 级 别IE4.0 才 能 过 滤, 如 果 你 要 评 级 可 以 在 网 页 中 加 入 以 下 代 码:

$#@60; meta http -equiv="PICS -Label"????

content=(PICS -1.1 "http://www.rsac.org/ratingsv01.html"

??l gen true comment "RSACi North America Server"

??for "http://youHostname"

??on "1998.11.26GMT08:15 ?0500"

??r (n 0 s 0 v 0 l 0))$#@62;

10. 怎 样 定 义 本 网 页 的 关 键 字?

----在 网 页 中 加 入 关 键 字, 可 以 供 某 些 搜 索 站 台 机 器 人 的 使 用, 它 们 会 利 用 该 关 键 字 为 你 的 网 站 做 索 引, 这样, 当 别 人 用 关 键 字 搜 索 网 站 时, 如 果 你 的 网 页 包 含 该 关 键 字, 那 么 就 可 以 被 列 出 了, 定 义 本 网 页 关 键 字, 可 以 加 入 以 下 代 码:

----$#@60; meta name="Keywords" content="china,enterprise,business,net" $#@62;

----Content 所 包 含 的 就 是 关 键 字, 你 可 以 自 行 设 置。

----这 里 有 个 技 巧, 你 可 以 重 复 某 一 个 单 词, 这 样 可 以 提 高 自 己 网 站 的 排 行 位 置, 如:

----$#@60; meta name="Keywords" CONTENT="china,china,china,china" $#@62;

11. 怎 样 链 接 本 网 页 的 对 象?

----有 时 链 接 发 生 在 一 个 网 页 里, 比 如 页 面 上 半 部 分 列 出 了 目 录, 下 部 分 就 列 出 了 内 容, 而 单 击 目 录 任 何 一个 项 目 都 可 以 跳 到 指 定 部 分, 可 以 在 要 被 链 接 的 内 容 部 分 设 置 如 下 方 式:

$#@60; A NAME=" #t1" $#@62;$#@60; /A $#@62;

而 要 链 接 到 以 上 设 置 的 部 分, 可 以 如 下 编 制:

$#@60; A HREF="index.htm #t1" $#@62;t1$#@60; /A $#@62;

12. 怎 样 为 不 支 持 框 架 结 构 的 浏 览 器 指 定 内 容?

----为 了 防 止 不 支 持 框 架 结 构 的 浏 览 器 访 问 你 的 网 页, 可 以 在 你 的 网 页 中 加 入 以 下 内 容:

$#@60; body $#@62;

$#@60; noframes $#@62;

本 网 页 是 框 架 结 构, 请 下 载 新 的 浏 览 器 浏 览

$#@60; /noframes $#@62;

$#@60; /body $#@62;

13. 怎 样 删 除 表 格 边 框?

----有 时 需 要 删 除 表 格 的 边 框, 你 可 以 把Border 设 置 为 如 下 代 码:

$#@60; body $#@62;

$#@60; table border="0" width="100 %" $#@62;

$#@60; tr $#@62;

$#@60; td width="100 %" $#@62;$#@60; /td $#@62;

$#@60; /tr $#@62;

$#@60; /table $#@62;

$#@60; /body $#@62;

14. 怎 样 隐 藏 在 状 态 栏 里 出 现 的LINK 信 息?

----大 家 知 道, 当 你 指 向 一 个 链 接 时, 该 链 接 的 信 息 会 出 现 在 浏 览 器 状 态 栏 里, 如 果 需 要 隐 藏 信 息, 可 以 如 下设 置:

$#@60; a href="http://c98.yeah.net" onMouseOver="window.status=none ;

return true" $#@62;test$#@60; /a $#@62;

15. 怎 样 在 网 页 中 加 入 多 媒 体 文 件?

----有 些 多 媒 体 文 件 无 需 其 他 程 序 就 可 以 播 放, 而 有 许 多 多 媒 体 文 件 需 要 外 部 程 序 的 帮 助, 当 浏 览 器 下 载不 支 持 的 格 式 时 会 调 用 外 部 程 序。 如 果 浏 览 器 没 有 安 装 这 种 外 部 程 序, 那 么 浏 览 器 会 自 动 去 下 载; 如 果你 需 要 加 入 多 媒 体 格 式, 可 设 置 如 下 代 码:

$#@60; EMBED SRC="tt.ram" AUTOSTART="TRUE" LOOP="2" WIDTH="80" HEIGHT="30" $#@62;

----对 于 不 支 持EMBED 标 签 的 浏 览 器, 可 以 改 用 标 签。

16. 怎 样 在 网 页 中 加 入 电 子 邮 件 表 单 提 交?

----表 单 提 交 需 要CGI 程 序 的 支 持, 但 你 也 可 以 利 用E ?mail 提 交, 当 你 设 计 好 表 单 后, 把Action 内 容 加 入 邮 件地 址 即 可, 如 下:

form method="POST" action="mailto:lovett@163.net" ENCTYPE="text/plain"$#@62;

17. 怎 样 隐 藏 热 讯 分 析 的 图 标?

----热 讯 分 析 是 许 多 网 友 使 用 的 服 务, 它 能 帮 助 你 分 析 网 站 的 流 量, 如 果 你 想 隐 藏 该 服 务 图 标, 可 以 把 服 务代 码 中 的 width=88 height=31 都 改 为1 即 可。

18. 怎 样 在 网 页 中 加 入 最 后 修 改 日 期?

----在 中 加 入 以 下 代 码 即 可:

$#@60; Script Language="Java Script" $#@62;

document.write

(" 最 后 修 改 日 期" +document.lastModified);

$#@60; /Script $#@62;

内容是《Web前端开发之Javascript视频》的课件,请配合大师哥《Javascript》视频课程学习。

错误处理对于web应用开发至关重要,任何javascript错误都有可能会导致网页无法使用,因此作为开发人员,必须要及时处理有可能出现的错误;

从IE4.0之后,几乎所有的浏览器都包含了一些基本的错误处理功能,但并没有统一,后来,由ECMAscript添加了异常处理机制,也就是try…catch…finally结构以及throw操作;

错误处理的重要性: 好的错误处理技术可以让脚本的开发、调试和部署更加流畅,能对代码进行更好的控制;另外,JS缺乏标准的开发环境;

错误类型:

语法错误(syntax error):也称为解析错误,发生在传统编程语言的编译解释时;发生语法错误时,就会发生阻塞,也就是不能继续执行代码,但只是同一个线程中的代码会受影响,其他线程中的代码不受影响;

// Uncaught SyntaxError: Invalid or unexpected token
// 未捕获的语法错误:无效或意外的标记
document.write("zeronetwork;

运行时错误(Runtime error):也称为exception异常, 其发生在编译期/解释期后,此时,问题并不出现在代码的语法上,而是在尝试完成一个非法的操作;

<input type="button" value="单击" onclick="handleClick()" />
<script>
// Uncaught ReferenceError: openMy is not defined
// 未捕获的引用错误:未定义openMy
function handleClick(){
    openMy();
}
</script>

错误报告:

因为每个浏览器都有自己的内置Javascript解释程序,所以每种浏览器报告错误的方式都不同;有些是弹出错误信息,有些是把信息打印在控制台中;

IE(windows): 默认情况下,会弹出包含错误细节的对话框,并询问是否继续执行页面上的脚本;如果浏览器有调试器(如:Microsoft Script Debugger) ,此对话框会提供一个是调试还是忽略的选项;如果在IE设置中取消了”显示错误”,那么会在页面左下角显示一个黄色的图标;

注:如果JS代码就在HTML里,显示错误行是正确的,如果是外部的JS文件,则行号往往差一行,如第5行则为第4行;

Mozilla(所有平台): 在控制台中打印错误信息,并发出警告;其会报告三种类型的消息:错误、严格警告和消息等的;

Safari (MacOS):是对JavaScript错误和调试的支持最差,默认情况下,它对终端用户不提供任何javascript错误报告;

错误处理:

Javascript提供了两种处理错误的方式:

  • BOM包含一个onerror事件处理函数,该函数通常被绑定在window对象或image对象上;
  • ECMAscript定义了try…catch结构来处理异常;

onerror事件处理函数:

window对象的onerror属性是一个事件处理程序,页面上出现异常时,error事件便在window对象上触发,并把错误消息输出到Javascript控制台上,这种方式也称为全局错误捕获;如:

window.onload = function(){
    show(); // 在onload事件中调用了一个不存在的函数
}
window.onerror = function(){
    alert("出现错误");
    return true;
}

获取错误信息:

window.onerror事件处理程序在调用时可以传5个参数,由这5个参数可以获取详细的错误信息;

  • message:错误信息,描述错误的一条消息;
  • URL:引发错误的Javascript所在的文档的URL;
  • line:文档中发生错误的行数;
  • column:发生错误的列数;
  • error:错误对象,这个error也称为全局错误对象;
window.onerror = function(sMessage, sUrl, sLine, sColumn, error){
console.log("Error:" + sMessage + " URL:" + sUrl + " Line:" + sLine + " Column:" + sColumn);
console.log(error);
    return true;
}

onerror处理程序的返回值:

如果返回true,则阻止执行默认的事件处理程序,也就是将通知浏览器,事件处理程序已经处理了错误,不需要其他操作,反之会显示错误消息;

某些元素也支持onerror; 但其处理函数没有任何关于error信息的参数,如:

document.images[0].onerror = function(event){
console.log(event);  // Event
console.log(event.type);  // error
}

这里的event参数是一个类型为Event事件对象,其存储的信息除了type返回了error,并没有其他和错误相关的信息;

全局错误处理window.onerror通常不能恢复脚本继续执行,但会给开发者发送错误信息;

window.onerror = function(error){
  console.log(error);
}
show();
console.log("中止,不会被执行");
window.onload = function(){
  console.log("也不会被执行");
}

可以是简单的打印,也可以把错误保存到日志记录里;

window.onerror就是绑定在window对象的error事件,也可以使用标准的添加事件侦听的方式window.addEventListener(eventtype, handler),其需要两个参数,eventtype为事件类型,在此为error,handler是事件处理函数,其需要一个参数event,一个ErrorEvent类型的对象,其保存着有关事件和错误的所有信息,如:

window.addEventListener("error", function(event){
  console.log(event);  // ErrorEvent
  console.log(event.error);  // Error对象
  console.log(event.error.name);
  console.log(event.error.message);
  console.log(event.error.stack);
  console.log(event.lineno);  // 行
  console.log(event.colno);  // 列
  console.log(event.filename);
});

在实际的开发中,这两种方式都会被使用,只不过addEventListener有定的兼容必问题,所以要兼顾所有的浏览器且不太关注事件对象本身的话,就使用window.onerror;

当加载自不同域的脚本中发生语法错误时,为避免信息泄露,语法错误的细节将不会报告,只会返回简单的"Script error.";

<script>
window.onerror = function(msg, url, lineNo, columnNo, error){
  console.log(msg);  // Script error
  console.log(url);  // ""
  console.log(lineNo);  // 0
  console.log(columnNo);  // 0
  console.log(error);  // null
}
</script>
<script src="https://www.zeronetwork.cn/demo/demo.js"></script>

可以针对同域和不同域的错误分开处理,如:

<script>
window.onerror = function(msg, url, lineNo, columnNo, error){
  var str_error = msg.toLowerCase();
  var sub_string = "script error";
  if(str_error.indexOf(sub_string) > -1)
    alert("脚本发生错误,详情请在控制台查看");
  else{
    var message = [
      '消息:' + msg,
      'URL:' + url,
      '行:' + lineNo,
      '列:' + columnNo,
      '错误对象:' + error
    ].join(" - ");
    alert(message);
  }
}
show();
</script>
<script src="https://www.zeronetwork.cn/demo/demo.js"></script>

从上在的执行结果来看,error事件执行了两次,原因是使用了两个script,也就是当一个script有错误发生时,它只会阻止当前的script块,而不会阻止其他的script块;如:

<script>
show();  // 会捕获
console.log("不会被执行");
myshow();  // 不会捕获
</script>
<script src="https://www.zeronetwork.cn/demo/demo.js"></script>
<script>
console.log("执行了");
demo();  // 会捕获
console.log("不会被执行");
</script>

body元素的onerror特性,也可以充当事件处理函数,如:

<body onerror="alert('出现了错误');return true;">

注意,先注释掉window.onerror等代码;

此时,可以直接使用event、source、lineno、colno、error等属性;

<body onerror="alert(event + '\n' + source + '\n' + lineno + '\n' + colno + '\n' + error);return true;">

当然了,也可以为body绑定error事件,此时各属性,必须明确指定,如:

document.body.onerror = function(msg, url,lineno,colno,error){
  alert(msg + '\n' + url + '\n' + lineno + '\n' + colno + '\n' + error);
  return true;
}

try-catch语句:

try语句中为期待正常执行的代码块,当在try语句中发生错误,其余代码会中止执行,catch语句就处理该错误,如果没有错误,就跳过catch语句;try和catch必须成对出现;

try{
    //code
    [break]
}catch([exception]){
    //code
}[finally]{
    //code
}
// 如
try {
    show();
    alert("不能执行");
} catch (error) {
    alert("出现一个错误:" + error);
} finally{
    alert("管你呢");
}

try语句块内的错误只会中止try语句块中发生错误之后的逻辑代码,并不会中止整个脚本的运行;执行try-catch语句,必须是运行时,运行时错误,也被称为异常;try-catch语句中指定只能有一个catch子句;try-catch语句适合处理无法预知、无法控制的错误;finally常被用于无论结果是否有异常,都要执行的代码,如:

try{
  alert("try");
  show();
  alert("no exec");
}catch(error){
  alert("catch");
}finally{
  alert("finally");
}
alert("continute");

代码执行的两条路径:如果没有异常,执行路径为:try->finally,反之为:try的部分->catch->finally;

一般用于关闭打开的链接和释放资源;

var connection = {open: function(){},close: function(){},send: function(data){}}
// var data = "大师哥王唯"; // 注释这一行,让它产生异常
connection.open();
try{
    connection.send(data);
}catch(exception){
    console.log("出现一个错误");
}finally{
    connection.close();
    console.log("关闭了");
}

还有一个典型的应用,读写文件,如:

function openFile(){};
function writeFile(data){};
function closeFile(){};
openFile();
try{
  writeFile();
}catch(error){
  console.log(error);
}finally{
  closeFile();
}

在try-catch-finally语句块中的变量是全局变量:

try{
  var name = "王唯";
  show();
  var city = "蚌埠";
}catch(error){
  var age = 18;
  console.log(name);
}finally{
  var sex = "男";
  console.log(name);
  console.log(age);
}
console.log(name);
console.log(city);
console.log(age);
console.log(sex);

try-catch-finally与return:

如果直接在try-catch-finally语句块中执行return,会抛出异常,如:

try {
  console.log("try");
  // return;  // Illegal return statement 非法返回语句
  console.log("try agin");
} catch (error) {
  console.log(error);
  // return;  // Illegal return statement
}finally{
  console.log("finally");
  // return;  // Illegal return statement
}

如:

function foo(){
  try {
    console.log("try");
    return 1;
    show();
    console.log("try agin");
  } catch (error) {
    console.log(error);
    return 2;
  }finally{
    console.log("finally");
    return 3;
  }
}
console.log(foo());  // 3

try-finally:

没有catch从句,只有try-finally也可以,目的是,只确保执行开始和最终的过程,而不处理错误,如:

try{
  console.log("try");
  show();
}finally{
  console.log("finally"); // 会执行
}
console.log("over"); // 不会执行,已中止

但此时,还是会抛出异常的,但此时,会在执行完finally后中止执行,并会查找外部的catch语句;

嵌套try-catch语句:

在catch子句中,也有可能会发生错误,所以就可以使用嵌套的try-catch语句,如:

try {
    show();
    console.log("不能执行");
} catch (error) {
    console.log("出现一个错误:" + error);
    try {
        var arr = new Array(10000000000000000);
        arr.push(error);
    } catch (error) {
        console.log("又出现了一个错误:" + error);
    }
} finally{
    console.log("管你呢");
}

也可以在try中嵌套try-catch-finally语句,如:

try{
  try{
    console.log("try");
    show();
  }catch(error){
    console.log("error");
  }finally{
    console.log("finally");
  }
}catch(error){
  console.log(error);
}

一个比较典型的应用,就是处理json数据,如:

// var json = '{"name":"wangwei", "age": 18, "sex": "男"}';
var json = '{bad json}';  // Uncaught SyntaxError
var data = JSON.parse(json);
console.log(data.name);
console.log(data.age);
console.log(data.sex);

一量json数据发生错误,整个应用都会崩溃,所以应该使用try-catch,如:

<div id="msg">您的信息:</div>
<script>
window.onload = function(){
  var msg = document.getElementById("msg");
  try{
    // var json = '{"name":"王唯", "age": 18, "sex": "男"}';
    var json = '{bad json}';  // Uncaught SyntaxError
    var data = JSON.parse(json);
    msg.innerHTML += "姓名:" + data.name + ",年龄:" + data.age + ",性别:" + data.sex;
  }catch(error){
    msg.innerHTML = "开小差了,找不到你的信息";
  }
}
</script>

当使用了try-catch语句,就不会将错误提交给浏览器,也就不会触发error事件,如:

window.onerror = function(error){
  console.log(error);  // 不会触发
}
try{
  show();
}catch(error){
  console.log(error);
}

Error错误对象:

在catch中会捕获一个Error错误对象;该对象在Javascript解析或运行时,一旦发生错误,引擎就会抛出这个对象;如果没有相关联的try-catch捕获该对象,就由浏览器输出这个对象;

// ...
console.log("错误:" + error + " name:" + error.name + " message:" + error.message);

也可以通过Error的构造器创建一个错误对象,这个Error对象也可用于用户自定义的异常;语法:new Error([message[, filename[, lineNumber]]]);

  • message:可选,错误描述信息;
  • fileName:可选,非标准,被创建的Error对象的fileName属性值,默认是调用Error构造器代码所在的文件的名字; 但大部分浏览器没有实现;
  • lineNumber:可选,非标准,被创建的Error对象的lineNumber属性值,默认是调用Error构造器代码所在的文件的行号;但大部分浏览器没有实现;

实例化Error对象,也可以不使用new关键字,如:

var error = new Error("自定义错误对象");
var error = Error("不使用new");
console.log(error);
console.log(error.name);  // Error
console.log(error.message);  // 自定义错误对象

Error错误对象属性:

  • name:表示错误类型的字符串;
  • message:实际的错误信息;

Error类还有6个子类,其可以通过错误对象的name属性返回具体异常类的名称:

  • EvalError:错误发生在eval()函数中;
  • RangeError:数值超出javascript可表示的范围;;
  • ReferenceError:使用了非法或不能识别的引用;
  • SyntaxError:发生了语法错误;
  • TypeError:操作数的类型不是预期所需的;
  • URIError:在encodeURI()或decodeURI()函数中发生了错误;
// EvalError
try{
  throw new EvalError("Eval异常");
}catch(error){
  console.log(error);
  console.log(error instanceof EvalError);  // true
  console.log(error.name);  // EvalError
  console.log(error.message);  // Eval异常
}
// RangeError
var num = 1;
try{
  num.toPrecision(500);  //  [prɪˈsɪʒn] 精度
}catch(error){
  console.log(error); 
}
// ReferenceError
var x;
try {
  x = y + 1;
} catch (error) {
  console.log(error);
}
// SyntaxError
try{
  eval("alert('wangwei)");
}catch(error){
  console.log(error);
}
// TypeError
var num = 1;
try{
  num.toUpperCase(); // 无法将数字转为大写
}catch(error){
  console.log(error);
}
// URIError (malformed [ˌmælˈfɔːmd]格式不正确,畸形的)
try{
  decodeURI("%%%"); // 使用了非法字符
}catch(error){
  console.log(error);
}

Error对象的message属性是浏览器生成的用于表示错误描述的信息,因为这个属性是特定于浏览器的,所以不同的浏览器上可能产生不同的错误信息,如:

try {
    eval("a ++ b");
    show();
    console.log("执行了吗?");
} catch (error) {
    // SyntaxError:Unexpected identifier或
    // SyntaxError:unexpected token: identifier
    console.log(error.name + ":" + error.message);
}

使用name属性判断错误类型:

try {
    eval("a++b");
} catch (error) {
    console.log(error instanceof SyntaxError); // true
    if(error.name == "SyntaxError")
        console.log(error.name + ":" + error.message);
    else
        console.log("未知错误:" + error.message);
}

抛出异常:

throw语句的作用是手动中断程序执行,抛出一个错误,一般用于有目的的抛出异常,也就是允许开发者可以创建自定义错误;

throw可以抛出任何类型的值,也就是说,它的参数可以是任何值;语法:throw error_object;error_object可以是字符串、数字、布尔或对象;

throw "出现一个错误";
throw 50666;
throw true;
throw new Object();
throw {
    toString:function(){
        return 'Error!';
    }
}
function getRectArea(width, height){
  if(isNaN(width) || isNaN(height))
    throw '参数应该是number类型';
  return width * height;
}
getRectArea("wangwei",10);

对于Javascript引擎来说,只要遇到throw语句,程序就会终止;

也可以抛出一个Error错误对象;Error对象的构造函数只有一个参数,

throw new Error("请再次尝试");

其他Error子类对象也可以抛出:

throw new SyntaxError("...");
throw new TypeError("...");
throw new RangeError("...");
throw new EvalError("...");
throw new URIError("...");
throw new ReferenceError("...");

对于Error类和其子类来说,错误对象的name就是其构造函数的名称,message是其构造函数的参数;

当抛出异常后,throw之后的语句将不会执行,并跳到相关联的catch语句中进行处理,如:

<h1>请输入18-99之间的数字</h1>
<input id="txtInput" type="text" />
<button id="btn">确定</button>
<p id="msg"></p>
<script>
function myFun(){
  var msg,x;
  msg = document.getElementById("msg");
  msg.innerHTML = "";
  x = document.getElementById("txtInput").value;
  try{
    if(x == "") throw "空的";
    if(isNaN(x)) throw "不是数字";
    x = Number(x);
    if(x < 18) throw "太小";
    if(x > 99) throw "太大";
    msg.innerHTML = "输入的值正确:" + String(x);
  }
  catch(error){
    msg.innerHTML = "输入的值不正确:" + error; 
  }
}
var btn = document.getElementById("btn");
btn.onclick = myFun;
</script>

也可以在某个语句块的外部捕获throw异常,如:

function sum(a,b){
    if(arguments.length < 2)
        throw new Error("需要两个参数");
    else
        return a + b;
}
try{
    console.log(sum(18));
}catch(error){
    // Error:需要两个参数
    console.log(error.name + ":" + error.message);
}

可以通过instanceof判断异常的类型来特定处理某一类的异常,例如可以区分浏览器抛出的异常和开发人员抛出的异常,如:

function sum(a,b){
    if(arguments.length < 2)
      throw new Error("需要两个参数");
    if(isNaN(a) || isNaN(b))
      throw "参数是不是Number类型";
    return a + b;
}
try{
    console.log(sum(18,12));
}catch(error){
  if(error instanceof SyntaxError)
    console.log("语法错误:" + error.name + ":" + error.message);
  else if(error instanceof Error)
    console.log(error.name + ":" + error.message);
  else
      console.log(error);
}

注:判断Error类型要放到if的最后一个条件;

即使在catch语句中,还可以根据实际情况,再次抛出异常,此时,其可以被外部的try-catch语句块捕获(如果存在的话);

当发生异常时,代码会立即停止,仅当有try-catch语句捕获到异常时,代码才会继续执行;其背后运行的原理是,当发生异常,JavaScript解释器会立即停止执行的逻辑,并跳转到就近的try-catch异常处理程序,如果发生异常的代码块中没有相关联的catch从句,解释器会检查更高层的闭合代码块,看它是否有相关联的异常处理程序,以此类推,直到找到一个异常处理程序为止;如果发生异常的函数中没有处理它的try-catch语句,异常将向上传播到调用该函数的代码,如此,异常就会沿着Javascript的语法结构或调用栈向上传播;如果没有找到任何异常处理程序,JavaScript将把异常当成程序错误来处理,并通过浏览器报告给用户;

自定义错误类型:

可以基于Error类来创建自定义的错误类型,此时可以使用throw抛出自定义的异常类,或通过instanceof来检查这个异常类的类型,新类型需要实现name和message属性;

function CustomError(message){
  this.name = "CustomError";
  this.message = message || 'Default Message';
  this.stack = (new Error()).stack;
}
// CustomError.prototype = new Error();
// 或者
CustomError.prototype = Object.create(Error.prototype);
CustomError.prototype.constructor = CustomError;
try{
  var name = "jingjing";
  if(name !== "wangwei")
    throw new CustomError("自定义的错误类型");
}catch(error){
  console.log(error.message);
}

小示例:

function UserException(message){
  this.name = "UserException";
  this.message = message;
}
function getMothName(m){
  m = m - 1;  // 调整月份数字到数组索引(1=Jan,12=Dec)
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  if(months[m] != undefined)
    return months[m];
  else
    throw new UserException("Invalid Month No");
}
try{
  var myMonth = 15;
  var monthName = getMothName(myMonth);
}catch(error){
  var monthName = "未知";
  console.log(error.name + ":" + error.message);
}

小示例:验证电话号码,如:

function Telephone(num){
  num = String(num);
  var pattern = /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
  if(pattern.test(num)){
    this.value = num.match(pattern)[0];
    this.valueOf = function(){
      return this.value;
    };
    this.toString = function(){
      return String(this.value);
    }
  }else{
    throw new TelephoneFormatException(num);
  }
}
function TelephoneFormatException(value){
  this.name = "TelephoneFormatException";
  this.message = "电话号码格式不正确";
  this.value = value;
  this.toString = function(){
    return this.value + ":" + this.message;
  }
}
// 应用
var TELEPHONE_INVALID = -1;
var TELEPHONE_UNKNOWN_ERROR = -2;
function verifyTelephone(num){
  try{
    num = new Telephone(num);
  }catch(error){
    if(error instanceof TelephoneFormatException)
      return TELEPHONE_INVALID;
    else
      return TELEPHONE_UNKNOWN_ERROR;
  }
  return num.toString();
}
console.log(verifyTelephone("010-66668888"));
console.log(verifyTelephone("13812345678"));
console.log(verifyTelephone("138123456")); // -1
console.log(verifyTelephone("wangwei")); // -1

常见错误:

由于javaScript是松散类型的,也不会验证函数的参数,因此错误只会在运行时出现;一般来说,需要关注三种错误:类型转换错误、数据类型错误、通信错误;

类型转换错误:

一般发生在使用某个操作符,或者使用其他可能自动转换值的数据类型的语言结构时;

function output(str1,str2,str3){
  var result = str1 + str2;
  if(str3)
    result += str3;
  return result;
}
console.log(output(1,2,3));
console.log(output(1,2));
console.log(output(1,2,0));
console.log(output(1,2,"wangwei"));

这就是一个非常典型的与期望不一致的方式;

数据类型错误:

在流控制语句中使用非布尔值,是极为常见的一个错误来源,为避免此类错误,就要做到在条件比较时确定传入的是布尔值,例如,把if语句改成:if(typeof str3 == 'number');

所以在使用某个变量或对象时,一定要适当地检查它的数据类型,如:

function reverseSort(values){
  // if(values){
  //   values.sort();
  //   values.reverse();
  // }
  if(arguments.length > 0){
    if(!Array.isArray(values))
      return [];
    else{
      values.sort();
      values.reverse();
      return values;
    }
  }
  return [];
}
var arr = [3,2,6,9,4];
// var arr = 100;  // Uncaught TypeError: values.sort is not a function
console.log(reverseSort(arr));

另一个常见的错误就是将参数与null值进行比较。与null进行比较只能确保相应的值不是null和undefined。要确保传入的值有效,仅检测null值是不够的;

function reverseSort(values){
  // if(values != null){  // 任何非数组值都会导致错误
  if(values instanceof Array) // 非数组值被忽略
    values.sort();
    values.reverse();
  }
  return values;
}
var arr = [3,2,6,9,4];
// var arr = 100;  // Uncaught TypeError: values.sort is not a function
console.log(reverseSort(arr));
// 或
function reverseSort(values, fun){
  if(values instanceof Array){
    if(fun != null && typeof fun === "function")
      values.sort(fun);
    else
      values.sort();
  }
  return values;
}
var arr = [3,2,6,9,4];
console.log(reverseSort(arr, function(a,b){
  return a > b ? -1 : 1;
}));

通信错误:最典型的就是Ajax应用,用其可以动态加载信息,但是,javascript与服务器之间的任何一次通信,都有可能会产生错误;

调试技巧:

使用警告框: 这是最简单、流行的方式,如:

function test(){
    alert("函数内");
    var iNum1 = 5, iNum2 = 10;
    alert(iNum1);
    var iResult = iNum1 + iNum2;
    alert(iResult);
}
test();

抛出自定义错误:

function assert(bCondition, sErrorMessage){
    if(!bCondition)
        throw new Error(sErrorMessage);
}
function divide(iNum1, iNum2){
    assert(arguments.length == 2, "divide需要两个参数");
    assert((!isNaN(iNum1) && !isNaN(iNum2)), "需要Number类型");
    return iNum1 / iNum2;
}
console.log(divide(10,2));
console.log(divide(10,"c"));  // 异常
// 或
try{
  console.log(divide(10,"c"));
}catch(error){
  console.log(error.name + ":" + error.message);
}

Javascript校验器:

jslint的主要目的是指出不合规范的js语法和可能的语法错误,包括一些不良代码;官网:http://www.jslint.com/

如以下,会给出警告:

  • 语句未使用块标记;
  • 一行的结尾未以分号结束;
  • 用var声明一个已在使用的变量;
  • with语句;

调试器:

Javascript自身不具备调试器,但目前所有的浏览器可以使用自身的调试器;

IE调试:

启用IE的调试功能:

菜单“工具”|“Internet选项”命令,打开“Internet选项”对话框,在“高级”选项卡中,找到两个“禁用脚本调试”复选框并取消;开始调试,调试的主要工作是反复地跟踪代码,找出错误并修正;

设置断点:

在调试程序窗口中,将光标移动到需要添加断点的行上,按一次F9键或单击,当前行的背景色变为红色,并且在窗口左边界上标上红色的圆点,当程序运行到断点时就会暂停;

运行调试:

单击继续或按F5进行逐步运行调试;F10步进、F11步入,都可以继续向下执行;将鼠标移动到变量名上时,会显示变量当前时刻的值;或者在右侧的“监视”窗格中可以观察该变量的值;点击变量信息框中的变量值或右侧“监视”空格中的变量值可以修改变量的当前值;更多的调试操作:查看调用关系、监视特定变量的值等;

// 示例
var balance = 200.0;    //
var willPay = 20.0;
function pay(_balance, _pay){
    return _balance - _pay;
}
function showBalance(){
    debugger;
    var blnc = pay(balance,willPay);
    alert("当前余额:" + blnc);
}
showBalance();

日志输出:

程序运行时,有些中间数据需要记录,以便检查程序运行的状态;对于JavaScript记录中间数据通常是以日志的形式记录需要记录的数据,再发送到服务器上保存起来;日志记录的内容可以是任意的信息,根据开发者的需要而定;

览器解析HTML文件的过程是网页呈现的关键步骤之一。具体介绍如下:


HTML文档的接收和预处理

  1. 网络请求处理:当用户输入URL或点击链接时,浏览器发起HTTP请求,服务器响应并返回HTML文件。此过程中,浏览器需要处理DNS查询、建立TCP连接等底层网络通信操作。
  2. 预解析优化:为了提高性能,现代浏览器在主线程解析HTML之前会启动一个预解析线程,提前下载HTML中链接的外部CSS和JS文件。这一步骤确保了后续渲染过程的顺畅进行。

解析为DOM树

  1. 词法分析和句法分析:浏览器的HTML解析器通过词法分析将HTML文本标记转化为符号序列,然后通过句法分析器按照HTML规范构建出DOM树。每个节点代表一个HTML元素,形成了多层次的树状结构。
  2. 生成对象接口:生成的DOM树是页面元素的结构化表示,提供了操作页面元素的接口,如JavaScript可以通过DOM API来动态修改页面内容和结构。

CSS解析与CSSOM树构建

  1. CSS文件加载与解析:浏览器解析HTML文件中的<link>标签引入的外部CSS文件和<style>标签中的内联CSS,生成CSSOM树。CSSOM树反映了CSS样式的层级和继承关系。
  2. CSS属性计算:包括层叠、继承等,确保每个元素对应的样式能够被准确计算。这些计算过程为后续的布局提供必要的样式信息。

JavaScript加载与执行

  1. 阻塞式加载:当解析器遇到<script>标签时,它会停止HTML的解析,转而先加载并执行JavaScript代码。这是因为JS可能会修改DOM结构或CSSOM树,从而影响已解析的部分。
  2. 异步和延迟加载:为了不影响页面的初步渲染,可以采用async或defer属性来异步加载JS文件,这样可以在后台进行JS的加载和执行,而不阻塞HTML解析。

渲染树的构建

  1. 合并DOM树和CSSOM树:有了DOM树和CSSOM树后,浏览器将它们组合成渲染树,这个树只包含显示界面所需的DOM节点及对应的样式信息。
  2. 不可见元素的排除:渲染树会忽略例如<head>、<meta>等不可见元素,只关注<body>内的可视化内容。

布局计算(Layout)

  1. 元素位置和尺寸确定:浏览器从渲染树根节点开始,递归地计算每个节点的精确位置和尺寸,这个过程也被称为“回流”或“重排”,是后续绘制的基础。
  2. 布局过程的优化:现代浏览器会尽量优化布局过程,例如通过流式布局的方式减少重复计算,确保高效地完成布局任务。

绘制(Paint)

  1. 像素级绘制:绘制是一个将布局计算后的各元素绘制成像素点的过程。这包括文本、颜色、边框、阴影以及替换元素的绘制。
  2. 层次化的绘制:为了高效地更新局部内容,浏览器会将页面分成若干层次(Layer),对每一层分别进行绘制,这样只需更新变化的部分。

因此,我们开发中要注意以下几点:

  • 避免过度使用全局脚本:尽量减少使用全局脚本或者将它们放在文档底部,以减少对HTML解析的阻塞。
  • 合理组织CSS和使用CSS预处理器:合理组织CSS文件的结构和覆盖规则,利用CSS预处理器进行模块化管理。
  • 利用浏览器缓存机制:通过设置合理的缓存策略,减少重复加载相同资源,提升二次访问的体验。
  • 优化图片和多媒体资源:适当压缩图片和优化多媒体资源的加载,减少网络传输时间和渲染负担。

综上所述,浏览器解析HTML文件是一个复杂而高度优化的过程,涉及从网络获取HTML文档到最终将其渲染到屏幕上的多个步骤。开发者需要深入理解这些步骤,以优化网页性能和用户体验。通过合理组织HTML结构、优化资源加载顺序、减少不必要的DOM操作和合理安排CSS和JavaScript的加载与执行,可以显著提升页面加载速度和运行效率。