SlideShare a Scribd company logo
Submit Search
Upload
10. 進入瀏覽器
Report
Share
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
•
1 like
•
283 views
1
of
80
10. 進入瀏覽器
•
1 like
•
283 views
Report
Share
Download Now
Download to read offline
Technology
script標籤基本特性 認識async與defer 初探同源策略與CORS 認識ES6前的模組管理 使用ECMAScript模組
Read more
Justin Lin
Technology / Community Evangelist at Free lancer
Follow
Recommended
11. DOM、事件與樣式 by
11. DOM、事件與樣式
Justin Lin
408 views
•
125 slides
2. 型態、變數與運算子 by
2. 型態、變數與運算子
Justin Lin
588 views
•
76 slides
從模組到類別 by
從模組到類別
Justin Lin
500 views
•
63 slides
9. meta-programming by
9. meta-programming
Justin Lin
363 views
•
58 slides
資料永續與交換 by
資料永續與交換
Justin Lin
519 views
•
72 slides
物件封裝 by
物件封裝
Justin Lin
1.1K views
•
74 slides
More Related Content
What's hot
5. 建構式、原型與類別 by
5. 建構式、原型與類別
Justin Lin
205 views
•
61 slides
CH10:輸入輸出 by
CH10:輸入輸出
Justin Lin
253 views
•
33 slides
14. 進階主題 by
14. 進階主題
Justin Lin
406 views
•
86 slides
進階主題 by
進階主題
Justin Lin
715 views
•
77 slides
从浏览器渲染看标准的重要性 by
从浏览器渲染看标准的重要性
DoCode org
514 views
•
40 slides
反射與類別載入器 by
反射與類別載入器
Justin Lin
562 views
•
70 slides
What's hot
(20)
5. 建構式、原型與類別 by Justin Lin
5. 建構式、原型與類別
Justin Lin
•
205 views
CH10:輸入輸出 by Justin Lin
CH10:輸入輸出
Justin Lin
•
253 views
14. 進階主題 by Justin Lin
14. 進階主題
Justin Lin
•
406 views
進階主題 by Justin Lin
進階主題
Justin Lin
•
715 views
从浏览器渲染看标准的重要性 by DoCode org
从浏览器渲染看标准的重要性
DoCode org
•
514 views
反射與類別載入器 by Justin Lin
反射與類別載入器
Justin Lin
•
562 views
CH16:整合資料庫 by Justin Lin
CH16:整合資料庫
Justin Lin
•
359 views
Ch07 使用 JSTL by Justin Lin
Ch07 使用 JSTL
Justin Lin
•
161 views
認識物件 by Justin Lin
認識物件
Justin Lin
•
1.1K views
Java SE 8 技術手冊第 11 章 - 執行緒與並行API by Justin Lin
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
•
3.7K views
資料永續與交換 by Justin Lin
資料永續與交換
Justin Lin
•
1.8K views
CH14:NIO 與 NIO2 by Justin Lin
CH14:NIO 與 NIO2
Justin Lin
•
326 views
從模組到類別 by Justin Lin
從模組到類別
Justin Lin
•
1.7K views
CH04:認識物件 by Justin Lin
CH04:認識物件
Justin Lin
•
421 views
CH17:反射與類別載入器 by Justin Lin
CH17:反射與類別載入器
Justin Lin
•
280 views
CH09:Collection與Map by Justin Lin
CH09:Collection與Map
Justin Lin
•
288 views
4. 使用物件 by Justin Lin
4. 使用物件
Justin Lin
•
174 views
Java SE 8 技術手冊第 5 章 - 物件封裝 by Justin Lin
Java SE 8 技術手冊第 5 章 - 物件封裝
Justin Lin
•
3.4K views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API by Justin Lin
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
深入模組化 by Justin Lin
深入模組化
Justin Lin
•
1K views
Similar to 10. 進入瀏覽器
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL by
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
2.9K views
•
71 slides
OPM by
OPM
goto100
378 views
•
22 slides
钱宝坤:多浏览器集成的JavaScript单元测试工具 by
钱宝坤:多浏览器集成的JavaScript单元测试工具
taobao.com
1.8K views
•
28 slides
美团前端架构简介 by
美团前端架构简介
pan weizeng
4.8K views
•
47 slides
Ch01 簡介Web應用程式 by
Ch01 簡介Web應用程式
Justin Lin
1.7K views
•
55 slides
DEV305 - ASP.NET 5 開發攻略 by
DEV305 - ASP.NET 5 開發攻略
Will Huang
6.1K views
•
39 slides
Similar to 10. 進入瀏覽器
(20)
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 7 章:使用 JSTL
Justin Lin
•
2.9K views
OPM by goto100
OPM
goto100
•
378 views
钱宝坤:多浏览器集成的JavaScript单元测试工具 by taobao.com
钱宝坤:多浏览器集成的JavaScript单元测试工具
taobao.com
•
1.8K views
美团前端架构简介 by pan weizeng
美团前端架构简介
pan weizeng
•
4.8K views
Ch01 簡介Web應用程式 by Justin Lin
Ch01 簡介Web應用程式
Justin Lin
•
1.7K views
DEV305 - ASP.NET 5 開發攻略 by Will Huang
DEV305 - ASP.NET 5 開發攻略
Will Huang
•
6.1K views
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2 by Duran Hsieh
2016年逢甲大學資訊系:ASP.NET MVC 4 教育訓練2
Duran Hsieh
•
307 views
CH1. 簡介 Web 應用程式 by Justin Lin
CH1. 簡介 Web 應用程式
Justin Lin
•
1.2K views
Elastic stack day-1 by YI-CHING WU
Elastic stack day-1
YI-CHING WU
•
1K views
Fl介绍 by Welefen Lee
Fl介绍
Welefen Lee
•
1.3K views
EtherCodes中的HTML5 by Garry Yao
EtherCodes中的HTML5
Garry Yao
•
285 views
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式 by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
•
19.2K views
Html5 by cazhfe
Html5
cazhfe
•
867 views
Build desktop app_by_xulrunner by Rack Lin
Build desktop app_by_xulrunner
Rack Lin
•
1.2K views
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例 by Will Huang
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
•
19.5K views
浅析浏览器解析和渲染 by Ailsa126
浅析浏览器解析和渲染
Ailsa126
•
2.4K views
构建可维护的Javascript 小米网 by yang alex
构建可维护的Javascript 小米网
yang alex
•
1.8K views
Postgre sql intro 0 by March Liu
Postgre sql intro 0
March Liu
•
1.5K views
ASP.NET MVC 6 新功能探索 by Will Huang
ASP.NET MVC 6 新功能探索
Will Huang
•
11.5K views
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet by Justin Lin
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Justin Lin
•
6.1K views
More from Justin Lin
Ch14 簡介 Spring Boot by
Ch14 簡介 Spring Boot
Justin Lin
872 views
•
22 slides
Ch13 整合 Spring MVC/Security by
Ch13 整合 Spring MVC/Security
Justin Lin
280 views
•
58 slides
Ch12 Spring 起步走 by
Ch12 Spring 起步走
Justin Lin
274 views
•
31 slides
Ch11 簡介 JavaMail by
Ch11 簡介 JavaMail
Justin Lin
157 views
•
8 slides
Ch10 Web 容器安全管理 by
Ch10 Web 容器安全管理
Justin Lin
153 views
•
30 slides
Ch09 整合資料庫 by
Ch09 整合資料庫
Justin Lin
233 views
•
92 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot by Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
•
872 views
Ch13 整合 Spring MVC/Security by Justin Lin
Ch13 整合 Spring MVC/Security
Justin Lin
•
280 views
Ch12 Spring 起步走 by Justin Lin
Ch12 Spring 起步走
Justin Lin
•
274 views
Ch11 簡介 JavaMail by Justin Lin
Ch11 簡介 JavaMail
Justin Lin
•
157 views
Ch10 Web 容器安全管理 by Justin Lin
Ch10 Web 容器安全管理
Justin Lin
•
153 views
Ch09 整合資料庫 by Justin Lin
Ch09 整合資料庫
Justin Lin
•
233 views
Ch08 自訂標籤 by Justin Lin
Ch08 自訂標籤
Justin Lin
•
133 views
Ch06 使用 JSP by Justin Lin
Ch06 使用 JSP
Justin Lin
•
250 views
Ch05 Servlet 進階 API、過濾器與傾聽器 by Justin Lin
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
204 views
Ch04 會話管理 by Justin Lin
Ch04 會話管理
Justin Lin
•
238 views
Ch03 請求與回應 by Justin Lin
Ch03 請求與回應
Justin Lin
•
236 views
Ch02 撰寫與設定 Servlet by Justin Lin
Ch02 撰寫與設定 Servlet
Justin Lin
•
352 views
13.並行、平行與非同步 by Justin Lin
13.並行、平行與非同步
Justin Lin
•
238 views
12. 除錯、測試與效能 by Justin Lin
12. 除錯、測試與效能
Justin Lin
•
153 views
11. 常用內建模組 by Justin Lin
11. 常用內建模組
Justin Lin
•
149 views
9. 資料結構 by Justin Lin
9. 資料結構
Justin Lin
•
292 views
8. open() 與 io 模組 by Justin Lin
8. open() 與 io 模組
Justin Lin
•
245 views
7. 例外處理 by Justin Lin
7. 例外處理
Justin Lin
•
115 views
6. 類別的繼承 by Justin Lin
6. 類別的繼承
Justin Lin
•
166 views
4. 流程語法與函式 by Justin Lin
4. 流程語法與函式
Justin Lin
•
188 views
10. 進入瀏覽器
2.
10.進入瀏覽器 • 學習目標 – script標籤基本特性 –
認識async與defer – 初探同源策略與CORS – 認識ES6前的模組管理 – 使用ECMAScript模組 2
3.
初探script標籤 • prompt()與alert()是瀏覽器上全域物 件提供的函式 • 在瀏覽器中,全域物件就是window物件, 代表瀏覽器視窗,為Window的實例 3
4.
• 現代Web應用程式,建議使用UTF-8編碼 4
5.
• HTML4規範了script標籤的type屬性, 必須設定它的值 • type在HTML5中為選用,若沒有指定,預 設為"text/javascript“ –
"module" – "text/jscript" – "text/vbscript" – 其他自訂值 5
6.
文件解析與script標籤 • 在瀏覽器載入HTML檔案後,必須先解析所 有HTML標籤 • 建立各標籤對應的DOM(Document Object
Model)物件並組成DOM樹 • 最後依DOM樹結構來呈現畫面 6
7.
• 預設情況下,瀏覽器在遇到script標籤時, 會停止文件解析,先執行完標籤間定義的 JavaScript,再繼續之後的文件解析 7
8.
• 在過去,JavaScript程式碼經常將script 放在head標籤之間 8
9.
• 瀏覽器處理head間的JavaScript時,還沒 有解析body標籤,試圖操作body中標籤對 應的DOM物件就會出錯 9
10.
• 可以將script標籤放在整份HTML文件之 後,</body>之前 10
11.
• window.onload事件,在HTML網頁的 「全部資源」載入後會發生 11
12.
• 「全部資源」載入不單只是DOM樹建立完 成,還包含了HTML頁面鏈結的CSS、圖片 等都載入完成 • HTML5標準化了DOMContentLoaded事 件,會在DOM樹建立之後就觸發 12
13.
開發人員工具 13
14.
14
15.
15
16.
引用.js原始碼 16
17.
17
18.
原始碼編碼 • 保持.js原始碼編碼與HTML檔案的編碼一致 • 如果HTML是UTF-8,那麼.js檔案也應該設 為UTF-8 •
瀏覽器會假設HTML與.js編碼兩者是一致的 18
19.
noscript標籤 • 在無法執行 JavaScript
時出現,提供替代 的頁面內容 19
20.
• 引用外部.js檔案,瀏覽器會暫停頁面解析、 「同步地」下載.js檔案,下載完成後執行 程式碼,執行完成後再繼續頁面解析 • HTML5為script標籤增加async與 defer屬性,這兩個屬性只在透過src引 用.js檔案才有作用 20
21.
async屬性 • 只要出現async屬性就可以了 • 「非同步地」下載.js檔案(使用瀏覽器執行緒) •
下載完成前,不阻斷後續資源下載與頁面剖析 • 下載完成,瀏覽器就會暫停頁面剖析, JavaScript引擎執行.js的程式碼後,再繼續處 理頁面剖析 • 執行順序也就無法預測 21
22.
• 如果程式庫檔案容量比較大,然而與初始 頁面處理沒有立即相關性 • 頂層程式碼不多或執行迅速,與其他程式 庫也沒有相依性 •
可以試著在script標籤上設置async屬性, 看看效果是否符合需求 22
23.
defer屬性 • 只要出現defer屬性就可以了 • 瀏覽器會「非同步地」下載.js檔案,不會 阻斷後續資源下載與頁面剖析 •
下載完成後也不會馬上執行程式碼,而是 在DOM樹生成、其他非defer的.js執行完 後,才執行被加上defer屬性的.js • 如果有多個defer屬性的.js,會按照「頁 面上出現的順序」執行 23
24.
• 如果程式庫檔案容量比較大,必須在剖析 完DOM之後執行 • 與其他程式碼間有順序上的相依性 •
就可以試著在script標籤上設置defer屬 性,看看效果是否符合需求 24
25.
初探安全 • 原始碼中的敏感資訊 • XSS •
認識安全弱點 25
26.
XSS • 如果Web應用程式的輸出中,會包含使用 者的輸入字串,永遠都要假設使用者並不 會輸入你期望的格式 • 請求10.1.5中的hello8.html,輸入「Name: <input>」會如何呢? 26
27.
• HTML5規定,innerHTML被指定的字串若 有script標籤,不會被執行 • 10.1.2的hello3.html,若是在輸入方塊中 鍵入「<script>alert('Hello, XSS')</script>」會如何呢? 27
28.
認識安全弱點 • OWASP TOP
10 • CWE(Common Weakness Enumeration) • CVE(Common Vulnerabilities and Exposures) 28
29.
29
30.
• CVE-YYYY-NNNN • 2017年底的CPU「推測執行」 (Speculative
execution)安全漏洞 – CVE-2017-5754 – CVE-2017-5753 – CVE-2017-5715 30
31.
同源策略與CORS • 同源指的是請求的資源與目前文件來源, 具有相同的協定、埠號以及位置 • http://caterpillar.onlyfun.net/ –
https://caterpillar.onlyfun.net – http://openhome.cc – http://192.168.0.1 – http://caterpillar.onlyfun.net:8080 31
32.
同源策略 • 無法取得src為非同源的iframe相關資訊 • 預設也無法以XMLHttpRequest或Fetch API等,請求非同源的資源,瀏覽器會禁止 JavaScript取得結果 32
33.
• 子網域的資源,預設視為非同源 • JavaScript在瀏覽器中,可以透過 document.domain設定子網域為同源 –
可以設為頂層網域,然而不能設其他網域 • 不同來源的.js檔案在HTML頁面中執行時, 是以該HTML頁面來源作為同源依據 33
34.
簡介CORS • Cross-Origin Resource
Sharing • 基於HTTP標頭的跨來源資源共享協議 • 瀏覽器發出非同源的跨域請求時,會附上 HTTP標頭Origin • 伺服端若同意跨域請求,回應中要包含 Access-Control-Allow-Origin標頭,值 可以是*或某一網域名稱 • 瀏覽器收到回應時,若回應中沒有Access- Control-Allow-Origin標頭,或者它的值 既非*也不符合目前文件來源,就不會交出收 到的資源 34
35.
• 遵照CORS – XMLHttpRequest或Fetch
API – ECMAScript模組的匯入 – script標籤若設定crossorigin屬性 35
36.
36
37.
37
38.
38
39.
39
40.
名稱空間管理 • ES6以後才有了模組語法 40
41.
物件名稱空間 41
42.
運用IIFE • 先前例子還是在全域佔用了validate名稱 42
43.
43
44.
44
45.
45
46.
名稱管理程式 46
47.
47
48.
48
49.
49
50.
50
51.
51
52.
從CommonJS到AMD • 自2005年JavaScript逐漸被人們廣為應用 之後,當年倉促定義的語言特性也因而曝 露出許多缺點 • 在避免全域名稱這方面,也發展出物件階 層、IIFE等各種模式 •
過去許多程式庫上,像是Dojo、YUI、 jQuery等,都可見不同名稱空間管理模式 之實現 52
53.
• 為了在瀏覽器環境之外構築出JavaScript生 態系,2009年1月,Mozilla的開發者Kevin Dangoor發起了ServerJS專案 • JavaScript必須得有個模組的標準規範,同 年九月專案更名為CommonJS,顯示其不 想僅侷促於伺服端的意圖 •
Node.js曾經遵循著CommonJS來實現模組 管理 53
54.
• 就Node.js來說,一個.js就是一個模組 54
55.
• 有人試圖將CommonJS的模組規範往前端 推進,希望能一統前端模組管理的混亂 • Node.js的主打特性是非同步,require() 函式在載入模組時卻是同步的 •
這意謂著require()某模組時,會阻斷瀏 覽器對後續頁面的處理 55
56.
• 非同步模組定義AMD(Asynchronous Module Definition) •
定義模組時使用define() • 載入模組時雖然也採用require(),然而 為了不影響頁面的後續處理,載入過程是 非同步 • AMD最為人所知的實現,正是RequireJS 56
57.
script標籤與模組 57
58.
• 預設具有defer的特性 • 引用模組時,.js不能來自本機 58
59.
59
60.
• 每個模組定義的名稱,僅在模組內可見 60
61.
• type設為"module"並引用外部模組時, 可以附加async屬性 • 如果引用的模組非同源,就會遵守CORS 61
62.
62
63.
• 支援模組的瀏覽器,會忽略<script nomodule></script> 63
64.
模組語法入門 64
65.
65
66.
• import的來源可以使用./開頭指定相對路 徑,或者是以/開頭指定絕對路徑 • 也可以是http://、https://開頭 •
對於非同源的模組來源,必須遵循CORS 66
67.
• 被匯入的模組在解析後,會執行其頂層程 式碼 • 同一模組無論import幾次,都只會下載、 解析、執行一次,不會重複匯入 •
可以為import的名稱取個別名 67
68.
• 模組公開的名稱,都會是Module物件上的 唯讀特性 • import時指定的名稱,相當於const宣告 的名稱 68
69.
69
70.
70
71.
71
72.
• 要公開的名稱必須使用{}包含 • import時必須使用{}表示要匯入的是名稱 72
73.
• export的是變數,不是被export時當時 參考的值 73
74.
• 匯入名稱之後,在目前模組直接公開 74
75.
• 如果打算提供模組的預設公開「值」 • export
default公開的是值 75
76.
• 模組可以有多個export,但是只能有一個 export default •
export default可以讓模組的客戶端, 在不知道模組中匯出了哪些名稱的情況下, 就能取用模組功能 76
77.
77
78.
78
79.
• 此方式並不建議 79
80.
• export default本質上是使用default 作為公開名稱 80