第三方JavaScript应用程序是自包含的应用组件,通常都是小脚本或插件,能够为Web站点增加功能。它们往往是由独立的组织或个人提供的,代码和文件都是来自于远程的Web地址。
《第三方JavaScript编程》由两位第三方应用程序开发领域的专家编写完成,通过丰富的示例和讲解引导读者掌握第三方Web开发的相关技术及如何开发运行在第三方环境的JavaScript代码。《第三方JavaScript编程》共10章,分别介绍了第三方JavaScript的定义、如何加载和执行代码、DOM渲染、第三方脚本和数据服务器之间的通信、跨窗口的消息传递方法、身份验证和cookie、第三方应用程序的安全性、JavaScript SDK的发展、性能、测试和调试。
目录
- 第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