Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 成人福利视频在线观看视频,亚洲日本在线播放,亚洲一区二区视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          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 >這是我的網站</a>

          效果:這是我的網站

          點擊彈出網站

          <a 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 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的加載與執行,可以顯著提升頁面加載速度和運行效率。


          主站蜘蛛池模板: 午夜影院一区二区| 日本亚洲成高清一区二区三区| 日韩精品无码中文字幕一区二区 | 国产伦精品一区二区三区免.费| 后入内射国产一区二区| 国产成人精品一区二区秒拍| 亚洲色无码专区一区| 久久久久女教师免费一区| 亚洲AV一区二区三区四区| 日韩有码一区二区| 精品一区二区三区波多野结衣| 国产精品福利一区| 精品一区二区三区在线播放视频| 亚洲AV成人精品日韩一区18p| 亚洲一区动漫卡通在线播放| 亚洲国产成人久久一区久久| 中文字幕乱码亚洲精品一区 | 国产91精品一区二区麻豆亚洲| 中文字幕一区二区精品区| 国产成人精品无人区一区| 精品少妇人妻AV一区二区三区| 国产精品一区二区av| 亚洲第一区在线观看| 国产成人精品一区二区三在线观看 | 久久一区二区三区99| 日韩a无吗一区二区三区| 天堂国产一区二区三区| 国产成人精品一区二区三区| 国产亚洲综合一区二区三区| 人妻视频一区二区三区免费| 99精品国产高清一区二区| 国产免费一区二区三区不卡| 日韩一区二区三区免费播放| 欧美日韩国产免费一区二区三区| 少妇无码一区二区三区| 曰韩精品无码一区二区三区| 亚洲乱码国产一区网址| 爱爱帝国亚洲一区二区三区| 国产SUV精品一区二区四| 亚洲高清一区二区三区电影 | 男人的天堂av亚洲一区2区|