产品特色
编辑推荐
1.第三方Web应用开发非常火爆,同时也面临着独特的挑战,有阅读和学习的必要与需求。Google的小应用和广告插件、Facebook的社交和游戏插件等都是支持第三方开发的。
2.本书是首本全面探讨第三方应用开发的图书。面向的是那些已经熟悉JavaScript了,但想要开发第三方应用的读者。
3.本书的两位作者来自知名的互联网,第二作者还是开源JavaScript工具JHint的贡献者和骨干,在社区的知名度和影响力都很大。他们为英文版开辟和维护的页面,http://thirdpartyjs.com/。
内容简介
第三方JavaScript应用程序是自包含的应用组件,通常都是小脚本或插件,能够为Web站点增加功能。它们往往是由独立的组织或个人提供的,代码和文件都是来自于远程的Web地址。
《第三方JavaScript编程》由两位第三方应用程序开发领域的专家编写完成,通过丰富的示例和讲解引导读者掌握第三方Web开发的相关技术及如何开发运行在第三方环境的JavaScript代码。《第三方JavaScript编程》共10章,分别介绍了第三方JavaScript的定义、如何加载和执行代码、DOM渲染、第三方脚本和数据服务器之间的通信、跨窗口的消息传递方法、身份验证和cookie、第三方应用程序的安全性、JavaScript SDK的发展、性能、测试和调试。
《第三方JavaScript编程》并非JavaScript语言的初级读本,适用于有一定第三方代码开发经验的开发者以及致力于研究其如何在外部环境运行的开发者们阅读。
作者简介
Ben Vinegar
Ben Vinegar 是 Disqus 的一名软件工程师,Disqus 是一个第三方评论平台,为超过 30 万的博客、在线出版物以及其它Web网站提供服务,其中包括 CNN、连线杂志、每日电讯报和 IGN。Ben 在加入 Disqus 之前,在一个非常流行的 Web 记账应用公司 FreshBooks 担任软件开发团队的主管。
Anton Kovalyov
Anton Kovalyov 是 Disqus 的一名软件工程师,在公司初期就曾主导 Disqus 评论微件的开发工作。他还参与一些 JavaScript 开源项目的开发与维护,包括代码质量工具 JSHint,和跨域通信的 JS 库 easyXDM。
内页插图
目录
第1章 第三方JavaScript介绍 1
1.1 第三方JavaScript的定义 2
1.2 第三方JavaScript的
用法 4
1.2.1 嵌入式微件 6
1.2.2 分析和统计 8
1.2.3 Web服务API封装 9
1.3 开发一个简单的微件 13
1.3.1 服务端生成脚本 14
1.3.2 通过iframes分发微件 16
1.4 第三方开发的挑战 17
1.4.1 未知的上下文 17
1.4.2 共享环境 18
1.4.3 浏览器限制 19
1.5 总结 19
第2章 应用的分发和加载 20
2.1 配置第三方开发环境 21
2.1.1 发布者的测试页面 21
2.1.2 Web服务器 22
2.1.3 模拟多个域 23
2.2 加载初始的脚本 24
2.2.1 阻塞式脚本引入 25
2.2.2 使用async和defer无阻塞
加载脚本 26
2.2.3 动态脚本插入 28
2.3 初始脚本文件 29
2.3.1 window和undefined
混淆 30
2.3.2 基本应用程序流程 31
2.4 加载额外的文件 32
2.4.1 JavaScript文件 33
2.4.2 库 35
2.5 脚本参数传递 37
2.5.1 使用查询字符串 37
2.5.2 使用片段标识符 40
2.5.3 使用自定义数据属性 40
2.5.4 使用全局变量 42
2.6 获取应用数据 44
2.7 总结 45
第3章 HTML和CSS的渲染 46
3.1 输出HTML 47
3.1.1 使用document.write 47
3.1.2 追加到已知位置 48
3.1.3 追加多个微件 50
3.1.4 解耦渲染对象 52
3.2 为你的HTML添加
样式 53
3.2.1 使用内联样式 53
3.2.2 加载CSS文件 54
3.2.3 嵌入CSS到
JavaScript中 56
3.3 防御性的HTML和CSS 59
3.3.1 命名空间59
3.3.2 CSS的特殊性 60
3.3.3 过度设置CSS的特殊性 62
3.4 将内容嵌入到iframe中 65
3.4.1 没有设置src的iframe 66
3.4.2 外部iframe 68
3.4.3 样式继承 69
3.4.4 何时避免使用iframe 73
3.5 小结 74
第4章 与服务器通信 75
4.1 AJAX和浏览器的同源
策略 76
4.1.1 判定同源的规则 77
4.1.2 同源策略和脚本加载 78
4.2 带填充的JSON
(JSONP) 80
4.2.1 通过脚本元素加载
JSON 80
4.2.2 动态的回调函数 81
4.2.3 局限性和安全问题 84
4.3 子域名代理 85
4.3.1 使用document.domain更改
文档的源 87
4.3.2 使用子域代理实现跨域
通信 88
4.3.3 子域名代理与JSONP
相结合 91
4.3.4 Internet Explorer和子域
代理 94
4.3.5 安全隐患 95
4.4 跨源资源共享 95
4.4.1 发送简单的HTTP请求 96
4.4.2 使用CORS传输
Cookie 98
4.4.3 发送预检请求 99
4.4.4 浏览器支持 99
4.5 总结 100
第5章 跨域iframe通信 101
5.1 HTML5 window.postMessage
API 102
5.1.1 使用window.postMessage
发送信息 103
5.1.2 接收发送给窗口的
消息 104
5.1.3 浏览器的支持 106
5.2 降级技术 107
5.2.1 使用window.name发送
消息 108
5.2.2 使用URL片段标识符发送消息 111
5.2.3 使用Flash发送消息 113
5.3 使用easyXDM简化跨域
消息通信 116
5.3.1 加载并初始化easyXDM 116
5.3.2 使用easyXDM.Socket发送
简单信息 118
5.3.3 使用easyXDM.Rpc定义
JSON-RPC接口 119
5.4 总结 124
第6章 验证和会话 125
6.1 第三方Cookie 126
6.1.1 Sessions的设置和
读取 127
6.1.2 禁用第三方Cookie 128
6.1.3 Internet Explorer和
P3P头 129
6.1.4 检测cookies是否可用 131
6.2 设置第三方cookie 134
6.2.1 使用独立窗口 134
6.2.2 iframe的解决方案
(只针对Safari) 137
6.2.3 Chrome和Firefox中的单页面会话 140
6.3 会话安全 140
6.3.1 HTTPS和更安全的
cookie 141
6.3.2 多级身份认证 142
6.4 总结 144
第7章 安全性 145
7.1 Cookies,会话,和会话
窃取 146
7.2 跨站脚本 147
7.2.1 XSS攻击 148
7.2.2 CSS中的XSS漏洞 149
7.2.3 防止XSS对应用的
攻击 151
7.3 跨站请求伪造 153
7.3.1 XSRF攻击 154
7.3.2 JSON劫持 155
7.3.3 保护应用免受XSRF
攻击 156
7.4 发布者漏洞 158
7.4.1 发布者模拟 158
7.4.2 点击劫持 160
7.4.3 拒绝服务 162
7.5 总结 162
第8章 独特的框架 163
8.1 实现一个最基本的
SDK 165
8.1.1 初始化 166
8.1.2 异步加载 167
8.1.3 暴露公共方法 170
8.1.4 事件监听器 170
8.2 版本管理 173
8.2.1 URL版本管理 174
8.2.2 通过初始化进行版本
控制 176
8.3 封装Web服务的
APIs 178
8.3.1 在客户端访问Web服务
APIs 179
8.3.2 封装Camera Stork API 182
8.3.3 识别发布者 186
8.3.4 用户授权和OAuth 190
8.4 总结 191
第9章 性能 193
9.1 优化负荷 194
9.1.1 合并和压缩源代码 195
9.1.2 减少图像请求 196
9.1.3 缓存文件 198
9.1.4 推迟HTTP请求 199
9.2 JavaScript优化 204
9.2.1 浏览器内部:UI线程,重绘和回流 205
9.2.2 控制耗性能的调用:throttle和debounce函数 206
9.2.3 使用setTimeout延迟
计算 208
9.3 被感知的性能 210
9.3.1 对用户的操作保持
乐观 211
9.3.2 在文档就绪之前
渲染 212
9.4 总结 213
第10章 调试和测试 215
10.1 调试 216
10.1.1 在生产环境中使用开发
环境的代码 218
10.1.2 单步执行代码 223
10.2 测试 227
10.2.1 单元测试、集成测试和
回归测试 228
10.2.2 使用QUnit编写回归
测试 230
10.2.3 使用Hiro写回归
测试 233
10.3 总结 236
前言/序言
《第三方JavaScript编程:解锁Web开发的无限可能》 在飞速发展的互联网时代,网页不仅仅是静态信息的载体,更是一个充满交互、动态和个性化体验的平台。而支撑这一切的,离不开JavaScript这门强大的编程语言。然而,现代Web开发早已不再是孤立作战,无数优秀的第三方库、框架和API如同催化剂,极大地提升了开发效率,拓展了网页的功能边界,甚至彻底改变了我们构建应用的方式。 《第三方JavaScript编程》正是这样一本聚焦于“外部力量”的深度指南。它不拘泥于JavaScript语言本身的语法细节,而是将目光投向了围绕JavaScript生态系统所构建的丰富资源,以及如何巧妙地驾驭这些工具来解决实际开发中的挑战。本书的宗旨是帮助开发者们走出“闭门造车”的误区,拥抱更广阔的Web开发天地,充分发挥第三方JavaScript组件的潜能,打造出更具竞争力、更富创新性的Web应用。 本书的独特视角与核心内容: 本书的核心理念在于“赋能”。我们相信,即使是最基础的JavaScript知识,结合恰当的第三方工具,也能释放出惊人的力量。因此,本书的内容安排并非简单罗列各种库的使用说明,而是围绕着“如何选择”、“如何集成”、“如何优化”以及“如何应对挑战”这几个关键维度展开。 第一部分:洞察第三方生态——理解其价值与选择之道 在深入学习具体工具之前,理解第三方JavaScript生态的现状、发展趋势以及选择背后的考量至关重要。 为什么我们需要第三方JavaScript? 我们将从宏观角度剖析第三方组件带来的核心价值:效率提升、功能丰富、社区支持、标准化以及加速创新。我们会讨论,在资源有限或时间紧迫的情况下,恰当利用第三方库如何成为事半功倍的关键。 辨别优质的第三方资源: 面对琳琅满目的JavaScript库和框架,如何做出明智的选择?本书将提供一套实用的评估标准,包括项目的活跃度、社区支持力度、文档质量、许可证兼容性、性能表现、安全性以及与现有项目结构的契合度。我们会深入讲解如何通过GitHub、npm、Stack Overflow等平台获取这些信息,并进行批判性分析。 理解不同类型的第三方JavaScript: 第三方JavaScript并非铁板一块,它们形态各异,服务于不同的目的。本书将对主流类型进行分类和阐述: UI组件库与框架: 从React、Vue、Angular等大型框架,到Bootstrap、Element UI、Ant Design等UI组件库,它们是如何规范化和加速前端UI开发的?我们将探讨它们的架构设计理念,以及如何在项目中选择和集成。 工具库(Utility Libraries): Lodash、Moment.js(或Day.js)等库如何简化数据处理、日期时间操作、字符串处理等繁琐任务?我们将分析它们的设计哲学,以及在现代JavaScript中如何高效利用它们。 数据可视化库: Chart.js、ECharts、D3.js等库如何将枯燥的数据转化为生动的图表?本书将重点讲解不同库的适用场景和核心API,以及如何根据数据类型和展示需求选择最合适的方案。 状态管理库: Redux、Vuex、Zustand等库如何解决大型应用中复杂的状态管理问题?我们将深入探讨它们的设计模式和工作原理,以及它们在不同前端框架中的应用。 网络请求库: Axios、Fetch API等如何简化HTTP通信?我们会对比它们的优劣,并讲解如何在实际项目中进行优雅的API调用。 其他领域库: 例如用于动画的GSAP、用于表单验证的Validator.js、用于时间线的TimelineJS等等,本书将通过精选案例介绍这些特定领域的优秀工具。 第二部分:集成与实践——将第三方力量融入你的项目 理论知识固然重要,但真正掌握一项技能,离不开动手实践。这一部分将聚焦于如何在实际项目中有效地集成和使用第三方JavaScript。 包管理器的力量:npm与Yarn的深度解析: npm和Yarn是现代JavaScript开发的基础设施。本书将从安装、更新、依赖管理、版本控制、脚本配置等多个维度,深入讲解这两个工具的强大功能,以及如何利用它们高效地管理项目依赖。我们会讨论package.json的结构,依赖冲突的解决策略,以及如何利用package-lock.json/yarn.lock确保开发环境的一致性。 模块化加载与构建工具:Webpack、Vite与Rollup的协同: 现代Web应用通常需要将成百上千个JavaScript文件打包成少数几个文件以提高加载性能。本书将介绍Webpack、Vite、Rollup等主流构建工具的核心概念,如模块化、代码分割、热模块替换(HMR)、代码压缩与优化等。我们会探讨如何在项目中配置这些工具,以最高效的方式集成第三方库。 API设计与集成模式: 如何优雅地调用第三方库的API?本书将通过大量代码示例,讲解常见的API调用模式,如函数式调用、面向对象接口、事件监听、回调函数与Promise、Async/Await等。我们会强调API设计的清晰性、可读性与可维护性。 与框架的无缝集成: 针对React、Vue、Angular等主流前端框架,本书将深入讲解如何将第三方组件、库与框架的生命周期、状态管理、路由等核心概念进行高效整合。例如,在React中如何使用第三方UI库,在Vue中如何集成状态管理,在Angular中如何配置第三方服务。 跨域请求与CORS的挑战与应对: 在调用外部API时,常常会遇到跨域问题。本书将详细解释CORS(跨域资源共享)的原理,并提供在客户端和服务器端解决跨域问题的实用技巧和策略。 性能优化: 集成第三方库往往会增加页面加载时间和运行负担。本书将提供一系列性能优化建议,包括按需加载、代码拆分、懒加载、服务端渲染(SSR)中的第三方库处理、以及使用性能分析工具(如Lighthouse)来诊断和改进。 第三部分:进阶探索与最佳实践 在掌握了基本的集成与使用方法后,本书将引导开发者进行更深层次的探索,关注代码质量、可维护性与安全性。 第三方库的源码阅读与贡献: 了解优秀第三方库的内部实现,是提升自身编程功力的重要途径。本书将指导开发者如何阅读第三方库的源码,理解其设计思想,甚至鼓励参与到开源社区的贡献中。 测试策略: 如何确保第三方库在你的项目中的稳定运行?本书将介绍单元测试、集成测试、端到端测试(E2E)等不同层级的测试策略,以及如何编写测试用例来验证第三方组件的行为。 安全性考量: 集成第三方代码也意味着引入潜在的安全风险。本书将探讨常见的安全隐患,如XSS攻击、CSRF攻击、依赖项漏洞等,并提供相应的防范措施和安全审计方法。 代码组织与可维护性: 如何在项目中合理组织第三方代码,使其易于理解、修改和维护?本书将提供一些最佳实践,如统一的引入方式、清晰的命名规范、以及利用模块化和封装来降低耦合度。 未来趋势与新兴技术: Web开发领域日新月异,新的第三方工具和技术层出不穷。本书将展望未来,介绍一些新兴的技术趋势,如WebAssembly、Serverless、PWA(Progressive Web Apps)中的第三方JavaScript应用等,为开发者提供前瞻性的视野。 谁适合阅读本书? 《第三方JavaScript编程》适合所有希望提升Web开发技能、拥抱现代化开发流程的开发者。无论你是初入前端领域的菜鸟,还是经验丰富的全栈工程师,亦或是后端开发者需要与前端协作,本书都能为你提供宝贵的知识和实用的技巧。 前端开发者: 深度掌握主流框架和UI库的使用,提升开发效率,打造更美观、交互性更强的用户界面。 后端开发者: 了解前端开发中如何高效利用第三方JavaScript,有助于更顺畅地与前端团队协作,理解前端技术栈。 全栈开发者: 整合前后端技术,高效构建完整的Web应用。 技术爱好者: 探索JavaScript生态系统的广阔前景,学习如何利用现有资源解决复杂问题。 结语 在Web开发的旅程中,第三方JavaScript是我们身边强大的盟友。它们以高度的抽象和成熟的解决方案,极大地简化了开发者的工作,让我们能够更专注于业务逻辑的实现和用户体验的创新。《第三方JavaScript编程》旨在成为你探索这个丰富生态的最佳向导,帮助你驾驭这些强大的工具, Unlock the boundless possibilities of web development. 让我们一起,用第三方JavaScript的力量,构建更精彩的Web世界。
这本书简直太有用了!我一直对如何在我的网页中添加更多动态效果和交互功能感到好奇,但又不太清楚从哪里下手。市面上关于 JavaScript 的书籍很多,但很多都过于基础,只讲一些简单的变量、函数之类的,要不就是直接跳到一些非常高级的框架,让我觉得无从适从。《第三方JavaScript编程》这本书正好填补了这个空白。它并没有让我从头开始学习 JavaScript 语言本身,而是直接切入了一个更实用的主题:如何利用和集成别人已经写好的 JavaScript 代码,让我的项目瞬间升级。 这本书的切入点非常棒,它不是简单地罗列各种第三方库,而是系统地讲解了如何去理解、评估和应用它们。例如,它讲到如何分析一个第三方库的 API,如何理解它的依赖关系,以及如何在我的项目中使用模块化加载器来管理这些库。这一点对我来说尤其重要,因为我经常会遇到各种各样的小工具或者插件,但不知道如何将它们干净利落地集成进来,导致代码变得混乱不堪。这本书提供了一些非常实用的策略和技巧,让我能够更清晰地组织我的代码,避免“技术债”。 而且,书里对一些常见的第三方 JavaScript 模式进行了深入的剖析。比如,它详细解释了事件代理、发布/订阅模式在第三方库中的应用,以及如何编写健壮的第三方代码,使其不容易受到其他脚本的影响。这让我不仅学会了如何“用”,更学会了如何“理解”和“思考”。我开始能够站在开发者的角度去审视这些第三方库,而不是仅仅把它当成一个黑盒子。这本书培养了一种批判性思维,让我能够更明智地选择适合自己项目的工具,而不是盲目跟风。 书中举的例子也都很贴切,涵盖了很多实际开发中会遇到的场景。比如,如何使用第三方图表库来可视化数据,如何集成第三方支付接口,甚至是如何利用社交媒体的 API 来增强用户互动。这些例子都非常具体,让我可以一步一步地跟着做,然后立刻看到效果。我不再需要花费大量时间去查阅官方文档,很多在实际操作中遇到的疑问,在这本书里都能找到答案。它让学习过程变得更加高效和有趣。 总的来说,《第三方JavaScript编程》这本书的价值在于它提供了一个“实用主义”的学习路径。它没有回避 JavaScript 的复杂性,而是通过聚焦于第三方代码的集成,让读者能够快速地掌握构建现代 Web 应用的关键技能。这本书不仅提升了我的编码效率,更重要的是,它扩展了我对 Web 开发生态的认知,让我明白如何站在巨人的肩膀上,快速实现我的创意。我强烈推荐给任何想要在 Web 开发领域更进一步的开发者,无论是初学者还是有一定经验的开发者,都能从中受益匪浅。