第二章 在HTML里面使用JS

本章內(nèi)容

  1. 使用<script>元素
  2. 嵌入腳本與外部腳本
  3. 文檔模式對(duì)JS的影響
  4. 考慮禁用JS的場(chǎng)景

(1)script元素

向HTML頁(yè)面中插入JS的主要方法就是使用script元素。
在script元素里面有6個(gè)屬性有的基本上已經(jīng)廢棄

  • async (可選)表示應(yīng)該立即下載腳本,但是不妨礙頁(yè)面上的其他操作蝴乔。比如下載其他資源或等待加載其他腳本.只對(duì)外部腳本文件有效.
  • charset (可選)表示通過(guò)SRC屬性指定代碼的字符集插佛。由于大多數(shù)瀏覽器會(huì)忽略他的值癞尚。因此很少有人用.
  • defer (可選)表示腳本可以延遲到文檔完全被解析和顯示之后在執(zhí)行毡惜。只對(duì)外部腳本文件有效
  • language 廢棄
  • src (可選)表示包含要執(zhí)行代碼的外部文件.
  • type (可選)表示編寫(xiě)代碼使用的腳本語(yǔ)言的內(nèi)容類型(text/javascript)不過(guò)這個(gè)屬性不是必須渊胸,沒(méi)有指定的話蔬浙,默認(rèn)就是(text/javascript)

包含在script元素內(nèi)部的JS代碼將從上至下依次解釋猪落。就拿下面的例子來(lái)說(shuō):解釋器會(huì)解釋到一個(gè)函數(shù)的定義,然后將該定義保存在自己的環(huán)境中畴博,在解釋器對(duì)script元素內(nèi)部的所有代碼求助完畢以前笨忌,頁(yè)面中的其余內(nèi)容都不會(huì)被瀏覽器加載或者顯示.

<script>
    function Hello(){
     window.alert("<\/script>")
    }
</script>

備注

  • 在使用script內(nèi)聯(lián)到HTML里面的時(shí)候,請(qǐng)不要在代碼中的任何地方出現(xiàn)"</script>"等字符串俱病,因?yàn)檫@樣瀏覽器會(huì)報(bào)出一個(gè)錯(cuò)誤官疲。
  • 如果非要使用請(qǐng)?jiān)谇懊婕由限D(zhuǎn)移符號(hào)\這樣就變成了/script這樣就不會(huì)報(bào)出錯(cuò)誤
  • 在HTML中使用script請(qǐng)一定要前后都要有閉口。不能前面有script,而后面沒(méi)有script這樣做他不會(huì)運(yùn)行的

(i)標(biāo)簽的位置

按照慣例標(biāo)簽的位置都應(yīng)該放在頁(yè)面的<head>元素中亮隙,比如

<head lang="en">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes" />
    <meta name="format-detection" content="telephone=no" />
    <title>PC與移動(dòng)端切換</title>
    <meta name="keywords" content=" ">
    <meta name="description" content=" ">
    <script type="text/javascript" src="js/respond.js"></script>
    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.touchSwipe.min.js"></script>
    <script type="text/javascript" src="js/judgeindex.js"></script>
</head>
<body>
[里面寫(xiě)內(nèi)容]()
</body>
  • 這種做法的目的就是把所有的外部文件(包括CSS文件和JS文件)的引用都放在相同的地方.
  • 可是在文檔的<head>元素中包含所有的JS文件途凫,一位置必須要等到全部的JS代碼都被下載,解析和執(zhí)行完成后,才開(kāi)始呈現(xiàn).
  • 對(duì)于需要很多JS代碼的頁(yè)面來(lái)說(shuō)。無(wú)疑會(huì)導(dǎo)致瀏覽器在呈現(xiàn)頁(yè)面的延遲溢吻,而延遲期間的瀏覽器窗口將會(huì)一片空白.為了避免這樣的情況维费,一般吧JS引用放在<body>元素頁(yè)面內(nèi)容的后面.

(ii)延遲腳本

  • HTML標(biāo)簽中定義了defer屬性,這個(gè)屬性的用途是表明腳本在執(zhí)行的時(shí)候不會(huì)影響頁(yè)面的構(gòu)造.
  • 也就是說(shuō)腳本會(huì)被延遲到整個(gè)頁(yè)面都解析完畢后在運(yùn)行。因此在<script>元素中設(shè)置defer屬性促王。相當(dāng)于告訴瀏覽器在body結(jié)束后執(zhí)行
  • <script type="text/javascript" defer="defer" src="js/jquery.min.js"></script>

(iii)異步腳本

  • HTML5為<script>元素定義了async屬性犀盟。它只適用于外部腳本文件。他與defer類似蝇狼。但是區(qū)別在于async的腳本并不能表征按照寫(xiě)好的先后順序執(zhí)行阅畴。
  • <script type="text/javascript" async=“async” src="js/respond.js"></script>
  • <script type="text/javascript" async="async" src="js/jquery.min.js"></script>
  • 在上面的代碼中第二個(gè)腳本可能會(huì)在第一個(gè)腳本文件之前執(zhí)行的,所以確保2個(gè)互不依賴十分重要迅耘,比如jquery類庫(kù),async屬性的目的是不讓頁(yè)面等待兩個(gè)腳本的下載和執(zhí)行贱枣。從而異步加載頁(yè)面其他內(nèi)容.為此,建議異步腳本不要再加載期間修改DOM
  • 異步腳本一定會(huì)在load事件前執(zhí)行颤专。

(iv)在XHTML中的用法

<script type="text/javascript">
 function comnpare(a,b)
 {
     if (a < b)
     {
         window.alert("a<b");
     }else if( a > b)
     {
         window.alert("a>b");
     }else if(a = b)
     {
         window.alert("a = b");
     }
 }
</script>
  • 在HTML中有特殊的規(guī)則可以確定<scirpt>元素中哪些內(nèi)容可以被解析,但是這些特殊的規(guī)則在XHTML中不適用.
  • 在這里比如a < b中的小于號(hào)(<)在XHTML中會(huì)被當(dāng)做開(kāi)始一個(gè)新的標(biāo)簽來(lái)解析纽哥,小于號(hào)后面不能跟空格,因此會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤.
  • 避免XHTML中出現(xiàn)語(yǔ)法的錯(cuò)誤有2個(gè)栖秕,第一個(gè)用相應(yīng)的HTML實(shí)體(<)來(lái)替代<號(hào),這樣是不會(huì)報(bào)錯(cuò)但是難以理解
  • 第二個(gè)方法是保證讓相同的代碼在HTML中正常運(yùn)行的第二個(gè)方法.就是用一個(gè)CData片段來(lái)包含JS代碼.
  • 譬如<script type="text/javascript">
    <![CDATA[
    function comnpare(a,b)
    {
    if (a < b)
    {
    window.alert("a<b");
    }else if( a > b)
    {
    window.alert("a>b");
    }else if(a = b)
    {
    window.alert("a = b");
    }
    }
    ]]>
    </script>

(2)嵌入代碼與外部文件

在HTML代碼中嵌入JS代碼雖然沒(méi)有問(wèn)題春塌,但是最好使用外語(yǔ)引入。

  • 可維護(hù)性:遍及不同HTML頁(yè)面的JS會(huì)造成維護(hù)問(wèn)題,但是吧所有的JS文件都放到一個(gè)文件里面摔笤,維護(hù)起來(lái)就會(huì)寬松多了。這樣便于集中管理
  • 可緩存:瀏覽器能夠依據(jù)具體的設(shè)置緩存鏈接所有的外部JS文件垦写。也就是說(shuō)如果有2個(gè)頁(yè)面都使用同一個(gè)文件吕世。那么這個(gè)文件只需下載一次。因此最終效果就是加快頁(yè)面加載的速度
  • 適應(yīng)未來(lái):通過(guò)外部文件來(lái)包含JS無(wú)需使用前面提到的XHTML,HTML和XHTML包含的外部文件的語(yǔ)法是相同的梯投。

(3)文檔模式

  • 混雜模式
    要是不區(qū)分的話命辖。混雜模式會(huì)讓IE的行為與IE5相同所以個(gè)人不建議使用
  • 標(biāo)準(zhǔn)模式
    標(biāo)準(zhǔn)模式讓IE的行為更接近標(biāo)準(zhǔn)行為分蓖。
  1. 過(guò)渡型

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"

  1. 嚴(yán)格型


<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

  1. HTML5

<!DOCTYPE html>

(4)<noscript>禁止JS

包含在<noscript>里面的元素只有在下面2種情況下顯示出來(lái).

  1. 瀏覽器不支持腳本
  2. 瀏覽器支持腳本但是腳本被禁用
    符合上面任何一個(gè)條件尔艇,瀏覽器都睡顯示<noscript>內(nèi)容,除此之外在其他的情況下,瀏覽器不會(huì)呈現(xiàn)<noscript>內(nèi)容

<noscript>
本頁(yè)面需要瀏覽器支持JS
</noscirpt>
當(dāng)用戶要是啟用了JS,用戶永遠(yuǎn)也看不到他么鹤,盡管他是頁(yè)面的一部分.

第二章小結(jié)

  • 在包含外部JS文件時(shí)终娃,必須將SRC屬性設(shè)置為指向相應(yīng)文件的URL,而這個(gè)文件既可以是同域文件蒸甜,也可以是跨域文件.
  • 所有<script>都會(huì)按照他們?cè)陧?yè)面中出現(xiàn)的先后順序依次被解析棠耕。在不使用defer和async情況下。只有解析玩<script>的代碼之后柠新,才會(huì)解析后面的代碼
  • 所有瀏覽器會(huì)優(yōu)先解析玩不使用defer的<script>代碼窍荧,,然后在解析后面的內(nèi)容,所以一般把<script>元素放在后面即</body>前面
  • 使用defer屬性可以讓腳本在文檔完全呈現(xiàn)后在執(zhí)行,延遲腳本按照他們的順序執(zhí)行
  • 使用async則不必等待恨憎,也不必阻塞文檔呈現(xiàn)蕊退。不能保證加載順序
  • 使用<noscript>則可以在瀏覽器禁止JS的時(shí)候呈現(xiàn)出來(lái)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市憔恳,隨后出現(xiàn)的幾起案子瓤荔,更是在濱河造成了極大的恐慌,老刑警劉巖喇嘱,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茉贡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡者铜,警方通過(guò)查閱死者的電腦和手機(jī)腔丧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)作烟,“玉大人愉粤,你說(shuō)我怎么就攤上這事∧昧茫” “怎么了衣厘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我影暴,道長(zhǎng)错邦,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任型宙,我火速辦了婚禮撬呢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妆兑。我一直安慰自己魂拦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布搁嗓。 她就那樣靜靜地躺著芯勘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腺逛。 梳的紋絲不亂的頭發(fā)上荷愕,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音棍矛,去河邊找鬼路翻。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茄靠,可吹牛的內(nèi)容都是我干的茂契。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慨绳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼掉冶!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起脐雪,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厌小,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后战秋,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體璧亚,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年脂信,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癣蟋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狰闪,死狀恐怖疯搅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情埋泵,我是刑警寧澤幔欧,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布罪治,位于F島的核電站,受9級(jí)特大地震影響礁蔗,放射性物質(zhì)發(fā)生泄漏觉义。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一浴井、第九天 我趴在偏房一處隱蔽的房頂上張望谁撼。 院中可真熱鬧,春花似錦滋饲、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至崭参,卻和暖如春呵曹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背何暮。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工奄喂, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人海洼。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓跨新,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親坏逢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子域帐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 一:在制作一個(gè)Web應(yīng)用或Web站點(diǎn)的過(guò)程中是整,你是如何考慮他的UI肖揣、安全性仲翎、高性能鸿秆、SEO、可維護(hù)性以及技術(shù)因素的...
    Arno_z閱讀 1,167評(píng)論 0 1
  • 源自SeeYouBug博客 地址為:http://www.cnblogs.com/SeeYouBug 一浇借、HTML...
    欲淚成雪閱讀 1,227評(píng)論 0 15
  • 1. 瀏覽器頁(yè)面有哪三層構(gòu)成事秀,分別是什么彤断,作用是什么? 構(gòu)成:結(jié)構(gòu)層、表示層易迹、行為層分別是:HTML瓦糟、CSS、Ja...
    程序猿人王小賤閱讀 1,872評(píng)論 1 11
  • 前端開(kāi)發(fā)面試知識(shí)點(diǎn)大綱: HTML&CSS: 對(duì)Web標(biāo)準(zhǔn)的理解赴蝇、瀏覽器內(nèi)核差異菩浙、兼容性、hack、CSS基本功:...
    秀才JaneBook閱讀 2,371評(píng)論 0 25