第1章 重构 1
1.1为何重构 2
1.1.1坏味道:难以辨认的代码 3
1.1.2坏味道:CEO根本搞不定他的旅行费用报销单 4
1.1.3坏味道:缓慢的页面呈现速度 5
1.1.4坏味道:不同的浏览器,不同的呈现 5
1.1.5坏味道:网页需要危险或者非标准技术的支持 6
1.1.6坏味道:公司主页突然显示“Pwned by Elite Doodz” 7
1.1.7坏味道:在Google搜索结果中首次排在17页之后 7
1.1.8坏味道:访问者致信投诉网站失灵 7
1.2何时重构 8
1.3重构什么 9
1.3.1为何要用XHTML 10
1.3.2为何要用CSS 13
1.3.3为何要用REST 14
1.4反对重构的理由 16
第2章 工具 18
2.1备份、测试用机和源码控制 18
2.2验证器 20
2.2.1 W3C标记验证服务 20
2.2.2日志验证程序 22
2.2.3 xmllint 23
2.2.4编辑器 24
2.3测试 24
2.3.1 JUnit 26
2.3.2 HtmlUnit 28
2.3.3 HttpUnit 29
2.3.4 JWebUnit 30
2.3.5 FitNesse 31
2.3.6 Selenium 32
2.3.7测试入门 35
2.4正则表达式 36
2.4.1搜索 36
2.4.2搜索模式 38
2.5 Tidy 39
2.5.1 -xhtml 40
2.5.2 -clean 41
2.5.3编码 42
2.5.4整洁的格式 43
2.5.5生成的代码 43
2.5.6当做库来用 43
2 6 TagSoup 43
2.7 XSLT 45
第3章 良构 47
3.1什么是良构 47
3.2将名称改为小写 50
3.2.1动机 51
3.2.2风险 52
3.2.3做法 52
3.3给属性值加引号 53
3.3.1动机 54
3.3.2风险 54
3.3.3做法 55
3.4补足遗漏的属性值 56
3.4.1动机 56
3.4.2风险 56
3.4.3做法 56
3.5将空标签替换为空元素标签 57
3.5.1动机 58
3.5.2风险 58
3.5.3做法 58
3.6添加结束标签 59
3.6.1动机 60
3.6.2风险 60
3.6.3做法 61
3.7消除重叠 63
3.7.1动机 63
3.7.2风险 63
3.7.3做法 64
3.8把文本转换为UTF-8 65
3.8.1动机 65
3.8.2风险 65
3.8.3做法 66
3.9转义小于号 67
3.9.1动机 67
3.9.2风险 67
3.9.3做法 67
3.10转义&号 68
3.10.1动机 69
3.10.2风险 69
3.10.3做法 69
3.11转义属性值中的引号 70
3.11.1动机 70
3.11.2风险 71
3.11.3做法 71
3.12加入XHTML DOCTYPE声明 71
3.12.1动机 72
3.12.2风险 72
3.12.3做法 72
3.13结束每一个实体引用 74
3.13.1动机 74
3.13.2风险 74
3.13.3做法 74
3.14替换虚构的实体引用 74
3.14.1动机 75
3.14.2风险 75
3.14.3做法 75
3.15加入根元素 75
3.15.1动机 76
3.15.2风险 76
3.15.3做法 76
3.16加入XHTML命名空间 76
3.16.1动机 76
3.16.2风险 77
3.16.3做法 77
第4章 有效性 78
4.1加入过渡型DOCTYPE声明 79
4.1.1动机 79
4.1.2风险 80
4.1.3做法 80
4.2删除所有不该存在的标签 81
4.2.1动机 81
4.2.2风险 81
4.2.3做法 81
4.3添加alt属性 83
4.3.1动机 83
4.32风险 83
4.3.3做法 84
4.4用object替代embed 85
4.4.1动机 86
4.4.2风险 86
4.4.3做法 87
4.5加入严格型DOCTYPE声明 89
4.5.1动机 90
4.5.2风险 90
4.5.3做法 90
4.6用CSS替代center 90
46.1动机 91
46.2风险 91
4.6.3做法 91
4.7用CSS替代font 93
4.7.1动机 93
4.7.2风险 94
4.7.3做法 94
4.8用em或CSS替代i 96
4.8.1动机 96
4.8.2风险 96
4.8.3做法 96
4.9用strong或者CSS替换b 98
4.9.1动机 98
49.2风险 98
4.9.3做法 98
4.10用CSS替换各种颜色属性 99
4.10.1动机 100
4.10.2风险 100
4.10.3做法 100
4.11把img元素的属性转换为CSS属性 102
4.11.1动机 102
4.11.2风险 102
4.11.3做法 102
4.12用object替代applet 103
4.12.1动机 104
4.12.2风险 104
4.12.3做法 105
4.13用CSS替换表现性元素 106
4.13.1动机 107
4.13.2风险 107
4.13.3做法 107
4.14把行内(Inline)元素放到块(block)元素中 108
4.14.1动机 108
4.14.2风险 109
4.14.3做法 109
第5章 布局 112
5.1替换表格布局 112
5.1.1动机 114
5.1.2风险 114
5.1.3做法 114
5.2使用CSS定位替代框架 123
5.2.1动机 124
5.2.2风险 124
5.2.3做法 125
5.3把内容放到最前面 132
5.3.1动机 133
5.3.2风险 133
5.3.3做法 133
5.4正确标记列表 135
5.4.1动机 136
5.4.2风险 136
5.4.3做法 136
5.5用CSS替换blockquote/ul的缩进 137
5.5.1动机 138
5.5.2风险 138
5.5.3做法 138
5.6替换占位图片 139
5.6.1动机 139
5.6.2风险 140
5.6.3做法 140
5.7添加id属性 140
5.7.1动机 141
5.7.2风险 141
5.7.3做法 141
5.8为图片添加width和height属性 144
5.8.1动机 144
5.8.2风险 144
5.8.3做法 144
第6章 可访问性 146
6.1把图片转换为文本 148
6.1.1动机 148
6.1.2风险 148
6.1.3做法 148
6.2为表单输入框添加标签 151
6.2.1动机 151
6.2.2风险 151
6.2.3做法 151
6.3使用标准的字段名称 154
6.3.1动机 156
6.3.2风险 156
6.3.3做法 156
6.4开启自动完成 159
6.4.1动机 160
6.4.2风险 160
6.4.3做法 160
6.5为表单添加Tab索引 160
6.5.1动机 161
6.5.2风险 161
6.5.3做法 162
6.6加入“跳过”机制 163
6.6.1动机 164
6.6.2风险 164
6.6.3做法 164
6.7添加内部标题 165
6.7.1动机 165
6.7.2风险 166
6.7.3做法 166
6.8把链接和标题里重要的内容放到前面 166
6.8.1动机 167
6.8.2风险 167
6.8.3做法 167
6.9加大输入框 168
6.9.1动机 168
6.9.2风险 168
6.9.3做法 168
6.10加入表格描述 169
6.10.1动机 171
6.10.2风险 171
6.10.3做法 171
6.11加入acronym元素 173
6.11.1动机 173
6.11.2风险 173
6.11.3做法 173
6.12加入lang属性 174
6.12.1动机 175
6.12.2风险 175
6.12.3做法 175
第7章Web应用程序 177
7.1用POST替换不安全的GET 177
7.1.1动机 177
7.1.2风险 178
7.1.3做法 178
7.2用GET替换安全的POST 181
7.2.1动机 181
7.2.2风险 182
7.2.3做法 182
7.3重定向POST为GET 184
7.3.1动机 184
7.3.2风险 185
7.3.3做法 185
7.4启用缓存 186
7.4.1动机 186
7.4.2风险 187
7.4.3做法 187
7.5阻止缓存 189
7.5.1动机 189
7.5.2风险 189
7.5.3做法 189
7.6使用 ETag 191
7.6.1动机 191
7.6.2风险 192
7.6.3做法 192
7.7用HTML替换Flash 194
7.7.1动机 195
7.7.2风险 195
7.7.3做法 195
7.8增加Web Fonns 2.0类型 197
7.8.1动机 198
7.8.2风险 198
7.8.3做法 199
7.8.4浏览器的支持情况 202
7.8.5数据验证 202
7.9用mailto链接取代联系表单 202
7.9.1动机 203
7.9.2风险 203
7.9.3做法 203
7.10封禁机器人 205
7.10.1动机 205
7.10.2风险 205
7.10.3做法 205
7.11转义用户的输入 207
7.11.1动机 208
7.11.2风险 208
7.11.3做法 208
第8章 内容 210
8.1修正拼写 210
8.1.1动机 210
8.1.2风险 210
8.1.3做法 211
8.2修复坏链接 213
8.2.1动机 213
8.2.2风险 214
8.2.3做法 214
8.3移动页面 219
8.3.1动机 219
8.3.2风险 219
8.3.3做法 219
8.4删除入口页面 221
8.4.1动机 222
8.4.2风险 223
8.4.3做法 223
8.5隐藏电子邮件地址 224
8.5.1动机 224
8.5.2风险 224
8.5.3做法 224
附录A正则表达式 227