1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
|
---
title: Firefox 49 for developers
slug: Mozilla/Firefox/Releases/49
tags:
- Firefox
- Firefox 49
translation_of: Mozilla/Firefox/Releases/49
---
<div>{{FirefoxSidebar}}</div><p><a style="float: right; margin-bottom: 20px; padding: 10px; text-align: center; border-radius: 4px; display: inline-block; background-color: #81BC2E; white-space: nowrap; color: white; text-shadow: 0px 1px 0px rgba(0, 0, 0, 0.25); box-shadow: 0px 1px 0px 0px rgba(0, 0, 0, 0.2), 0px -1px 0px 0px rgba(0, 0, 0, 0.3) inset;" href="https://www.mozilla.org/firefox/developer/">To test the latest developer features of Firefox,<br>
install Firefox Developer Edition</a> Firefox 49 was released on September 20, 2016. This article lists key changes that are useful not only for web developers, but also Firefox and Gecko developers as well as add-on developers.</p>
<h2 id="对于Web开发者的改变">对于Web开发者的改变</h2>
<h3 id="开发者工具">开发者工具</h3>
<ul>
<li>控制台记录的JavaScript错误信息 <a href="https://hacks.mozilla.org/2016/06/helping-web-developers-with-javascript-errors/">现在提供了一个 [Learn more] 链接</a> 为了额外的调试帮助({{bug("1179876")}}).</li>
<li>CSS 自动完成: 显示更多的建议在自动完成弹窗 ({{bug("1260419")}}).</li>
<li>动画查看器现在 <a href="/en-US/docs/Tools/Page_Inspector/How_to/Work_with_animations#Further_information_about_animation_compositing">暴露出动画的性能信息</a> 在开发工具中 ({{bug("1254408")}}).</li>
<li><a href="/en-US/docs/Tools/Page_Inspector/How_to/Examine_and_edit_HTML#Element_popup_context_menu">查看器的上下文菜单</a>被重组的更清楚并且更加容易的使用 ({{bug("1211613")}}).</li>
<li>查看器现在支持 <code>#RRGGBBAA</code> 和 <code>#RGBA</code> 语法对于颜色的值 ({{bug("1271191")}}).</li>
<li>开发工具不在显示自关闭标签 (比如 {{HTMLElement("br")}} 和 {{HTMLElement("img")}} 好像它们在HTML页面拥有关闭标签; 这个行文在XHTML页面上没有改变 ({{bug("820926")}}).</li>
<li>可用性的提高!
<ul>
<li>工具可以做更好的工作去确保键盘聚焦的地方更加明显 ({{bug(1242851)}}).</li>
<li>Accessibility labels have been added to unlabeled controls ({{bug(1242715)}}).</li>
<li>增加合适的语义化的树状图和键盘导航到查看器的标记视图 ({{bug(1242694)}}).</li>
</ul>
</li>
<li><a href="/en-US/docs/Tools/Network_Monitor">网络监视器</a> 现在显示一个原因列, 该列提供导致每一个详细的网络请求的踪迹 ({{bug(1134073)}}).</li>
<li>在 <em>about:debugging</em> 附加组件页面, Reload 按钮现在只能在临时的附加组件开启. 这将禁用在其他的所有附加组件 ({{bug(1273184)}}).</li>
<li>在 <em>about:debugging</em> Workers 页面, 如果 <a href="/en-US/docs/Tools/about:debugging#Service_workers_not_compatible">service workers are incompatible</a> 在现在的浏览器上配置一个温馨的提示将会显示在 Service Workers 部分 ({{bug(1266415)}}).</li>
<li><em>about:debugging</em> 现在有一个 <a href="/en-US/docs/Tools/about:debugging#Tabs">新的标签页</a> 可用, 这个标签页提供一个完整的列表包含所有的在FireFox实例中打开的所有的调试标签 ({{bug(1266128)}}).</li>
<li><em>Disable Cache</em> 选项 在 <a href="/en-US/docs/Tools/Settings#Advanced_settings">工具箱高级设置</a> 已经被重命名成 Disable HTTP Cache, 来使它更加的清晰得标明这个选项影响 HTTP cache, 而不是 <a href="https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API">Service Workers</a>/the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Cache">Cache API</a> (bug(1253018)).</li>
<li><a href="/en-US/docs/Tools/Storage_Inspector#IndexedDB">存储查看器现在允许 IndexedDB 数据库可以被删除</a> 通过它们的上下文菜单 ({{bug("1205123")}}), 并且将显示一个温馨的提示如果 indexedDB因为一些原因没有被删除 (比如它们仍然有活动的链接) ({{bug(1268460)}}).</li>
</ul>
<h3 id="HTML">HTML</h3>
<ul>
<li>增加支持 {{HTMLElement("details")}} 和 {{HTMLElement("summary")}} 元素 ({{bug(1226455)}}).</li>
<li>{{htmlattrxref("pattern", "input")}} 属性对于 {{HTMLElement("input")}} 元素现在使用 <code>'u'</code> 参数在潜在的 JavaScript {{jsxref("RegExp")}} ({{bug(1227906)}}).</li>
<li>为了匹配规范的变化, {{HTMLElement("track")}}的属性值{{htmlattrxref("kind", "track")}}现在已经无效,现在用 "metadata" 代替 "subtitles" ({{bug(1269712)}}).</li>
<li>{{HTMLElement("iframe")}} 元素的 {{htmlattrxref("sandbox", "iframe")}} 属性现在已经支持 <code>'allow-popups-to-escape-sandbox'</code> <code>和 'allow-modals'</code> 值({{bug(1190641)}}).</li>
<li>支持 microdata 属性并且已经移除了 Microdata API ({{bug(909633)}}).</li>
<li>{{htmlattrxref("referrerpolicy", "a")}} 属性在 {{HTMLElement("a")}} 元素现在已经支持 <code>'no-referrer-when-downgrade</code>' 和 <code>'origin-when-cross-origin'</code> ({{bug(1178337)}}).</li>
<li>{{HTMLElement("label")}}的属于某一个Form的属性{{htmlattrxref("form", "label")}} 现在已经被移除. 但是The {{domxref("HTMLLabelElement.form")}} 属性依旧存在, 但是现在返回的form是与label的控制权相关联的, 如果有控制(或者是与控制权相关联的form) ({{bug(1268852)}}).</li>
</ul>
<h3 id="CSS">CSS</h3>
<ul>
<li>增加{{cssxref("background-position-x")}} 和 {{cssxref("background-position-y")}}, 这允许去分别的指定水平和垂直偏移量来去绘画一个背景图片; 这两个属性是 {{cssxref("background-position")}} 的组件 ({{bug("550426")}}).</li>
<li>在 {{cssxref("background-repeat")}} 增加支持 <code>round</code> 和 <code>space</code> 关键字 ({{bug("548372")}}).</li>
<li>On {{cssxref("background-clip")}}, the keyword <code>text</code> is now activated by default ({{bug(1264905)}}).</li>
<li>增加支持去指定颜色的时候使用alpha通道,使用 4-或者是8-位的 CSS十六进制值 (#RRGGBBAA 或者是 #RGBA) ({{bug("567283")}}).</li>
<li>伪类选择器 {{cssxref(":dir()")}} 已经去除了浏览器前缀 ({{bug(859301)}}).</li>
<li>在我们的实验实现 (还没有在默认的情况下被激活) CSS属性 {{cssxref("clip-path")}}, 我们现在可以在 {{cssxref("<basic-shape>")}} 中间插入值 ({{bug(1110460)}}).</li>
<li>增加 <a href="/en-US/docs/Web/CSS/length#q"><code>q</code> 长度单位</a> ({{bug(1274526)}}).</li>
<li>属性值 {{cssxref("text-align-last")}} 已经去除里浏览器前缀 ({{bug(1039541)}}).</li>
<li>增加支持 {{cssxref("overflow-wrap")}}, 来替换replacing {{cssxref("word-wrap")}} ,但是现在被替换的依旧可用来作为一个可以替换的名字 ({{bug(955857)}}).</li>
<li>我们的实验 <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout">CSS Grids</a> 实现已经被增强:
<ul>
<li>实现{{cssxref("<percentage>")}} 支持对于 {{cssxref("grid-gap")}}, {{cssxref("grid-row-gap")}}, and {{cssxref("grid-column-gap")}} 属性 ({{bug(1266268)}}).</li>
<li>实现网格布局支持对于 {{cssxref("align")}}, {{cssxref("justify-self")}}<code>:baseline</code> 和 <code>last-baseline</code> (也称 "baseline self-alignment") ({{bug(1221525)}}).</li>
<li>实现网格子项目基线内容对齐 ({{bug(1256429)}}).</li>
</ul>
</li>
<li>我们的实验 <a href="/en-US/docs/Web/CSS/CSS_Masks">CSS Masks</a> 实现已经被增强:
<ul>
<li>{{cssxref("mask-origin")}} 属性现在使用 <code>border-box</code> 代替 of <code>padding-box</code> 作为初始值, 为了匹配规范 ({{bug(1258286)}}).</li>
<li>{{cssxref("mask-repeat")}} 属性现在支持 <code>space</code> 和 <code>round</code> 值 ({{bug(1258626)}}).</li>
<li>Fixed an issue preventing the {{cssxref("mask-position")}} attribute from being animated ({{bug(1273804)}}).</li>
</ul>
</li>
<li>偏好控制 {{cssxref("text-emphasis")}} 已经被移除. 所以支持该属性可以不再被禁用 ({{bug(1229609)}}).</li>
</ul>
<h3 id="JavaScript">JavaScript</h3>
<ul>
<li>ES2015 (ES6) {{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "getPrototypeOf()")}} 和 {{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "setPrototypeOf()")}} {{jsxref("Proxy")}} traps属性已经被实现 ({{bug(888969)}}).</li>
<li>ES2015 (ES6) {{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}}, {{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}}, {{jsxref("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}}, and {{jsxref("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}} 方法, 和 {{jsxref("RegExp.@@species", "RegExp[@@species]")}} getter方法已经被实现 ({{bug(887016)}}).</li>
<li>不被赞成的, 非标准的标记参数 <code>String.prototype.</code>{{jsxref("String.prototype.match", "match")}}/{{jsxref("String.prototype.search", "search")}}/{{jsxref("String.prototype.replace", "replace")}} 已经被移除 ({{bug(1108382)}}).</li>
<li>{{jsxref("Date.parse()")}}方法在解析2位数年份的行为已经被改变为了更好地和 Google Chrome browser 更好地协作 ({{bug(1265136)}}).</li>
</ul>
<h3 id="InterfacesAPIsDOM">Interfaces/APIs/DOM</h3>
<h4 id="DOM_HTML_DOM">DOM & HTML DOM</h4>
<ul>
<li>方法 {{domxref("DOMTokenList.supports()")}} 已经被增加 ({{bug(1257849)}}).</li>
<li>{{domxref("DOMTokenList.replace()")}} 方法已经被增加 ({{bug(1224186)}}).</li>
<li>第一位的 <code>'?'</code> 字符现在已经被忽视当作为参数在{{domxref("URLSearchParams.URLSearchParams", "URLSearchParams()")}} 构造器 ({{bug(1268361)}}).</li>
<li>The value returned by {{domxref("URL.origin")}}, {{domxref("HTMLAnchorElement.origin")}}, and {{domxref("HTMLAreaElement.origin")}} for URL using the <code>blob:</code> scheme is no longer incorrectly <code>null</code> but is instead the origin of the URL formed by removing the leading <code>blob:</code> ({{bug(1270451)}}).</li>
<li>在预渲染模式, {{domxref('Document.visibilityState')}} 属性现在返回 <code>'prerender'</code> ({{bug(1069772)}}).</li>
<li>{{domxref("Window.isSecureContext")}} 属性已经被实现 ({{bug(1162772)}}).</li>
<li>DOM4 {{domxref("ChildNode.before()")}}, {{domxref("ChildNode.after()")}}, {{domxref("ChildNode.replaceWith()")}}, {{domxref("ParentNode.append()")}} and {{domxref("ParentNode.prepend()")}} 方法已经被实现 ({{bug(911477)}}).</li>
<li>{{domxref("TouchList.identifiedTouch()")}} 方法已经被移除 ({{bug(1188539)}}).</li>
<li>在默认的情况下, <code>scrollbars</code> {{domxref("Window")}} 特性是开启的当调用{{domxref("Window.open()")}}. 在过去, 这种情况下被强烈推荐开启但却不是默认开启的 ({{bug(1257887)}}).</li>
<li>增加实验性并且非标准的 {{domxref("HTMLMediaElement.seekToNextFrame()")}} 方法, 它允许你which allows seeking frame-by-frame through video content ({{bug(1235301)}}). While you're encouraged to experiment with this method to help us understand how useful it is, <em>do not use it in production code!</em></li>
<li>The {{domxref("HTMLLabelElement.form")}} property now returns the form with which the label's control is associated, if there is a control (and if that control is associated with a form). Previously, labels were directly associated with forms using this property ({{bug(1268852)}}).</li>
<li>Support for the third parameter of {{domxref("EventTarget.addEventListener()")}}, either a {{jsxref("Boolean")}} or an {{interface("EventListenerOptions")}} has been added ({{bug(1266164)}} and {{bug(1266066)}}).</li>
<li>The audio volume related values for {{domxref("KeyboardEvent.key")}} have been renamed. <code>"VolumeDown"</code> is now <code>"AudioVolumeDown"</code>, <code>"VolumeUp"</code> is now <code>"AudioVolumeUp"</code>, and <code>"VolumeMute"</code> is now <code>"AudioVolumeMute".</code> This brings Firefox into alignment with the latest draft of the UI Events specification ({{bug(1272578)}}). See {{SectionOnPage("/en-US/docs/Web/API/KeyboardEvent/code", "Code values")}} for a full list of available key codes.</li>
<li>The keys previously referred to as <code>"MozHomeScreen"</code>, <code>"MozCameraFocusAdjust"</code>, and <code>"MozPhoneCall"</code> now have official names in the UI Events specification: <code>"GoHome"</code>, <code>"CameraFocus"</code>, and <code>"Call"</code>. Firefox 49 has been updated to use the new names ({{bug(1272599)}}). See {{SectionOnPage("/en-US/docs/Web/API/KeyboardEvent/code", "Code values")}} for a full list of available key codes.</li>
<li>The key values <code>"Separator"</code> and <code>"MediaSkip"</code> have been removed, as they were deprecated and unused ({{bug(1232919)}}).</li>
<li>Key values and the corresponding key codes <code>"Hyper"</code> and <code>"Super"</code> have been added to represent these legacy modifier keys ({{bug(1232919)}}).</li>
<li>两个键值为了多媒体数字小键盘已经被增加: <code>"Key11"</code> and <code>"Key12"</code> ({{bug(1232919)}}).</li>
<li>下面的心键值被增加为了音频控制按键: <code>"AudioBassBoostToggle"</code>, <code>"AudioTrebleDown"</code>, and <code>"AudioTrebleUp"</code> ({{bug(123919)}}).</li>
<li>键值被增加为了麦克风控制按键: <code>"</code><code>MicrophoneToggle"</code>, <code>"</code><code>MicrophoneVolumeDown"</code>, <code>"</code><code>MicrophoneVolumeUp"</code>, and <code>"</code><code>MicrophoneVolumeMute"</code> ({{bug(123919)}}).</li>
<li>新的键值被增加为了支持语音识别设备: "<code>SpeechCorrectionList"</code> and <code>"</code><code>SpeechInputToggle"</code> ({{bug(1232919)}}).</li>
<li>新的键值已经被增加去支持手机上的特别的按键: <code>"</code><code>AppSwitch"</code>, <code>"</code><code>Call"</code>, <code>"</code><code>CameraFocus"</code>, <code>"</code><code>EndCall"</code>, <code>"</code><code>GoBack"</code>, <code>"</code><code>GoHome"</code>, <code>"</code><code>HeadsetHook"</code>, <code>"</code><code>LastNumberRedial"</code>, <code>"</code><code>Notification"</code>, <code>"</code><code>MannerMode"</code>, and <code>"</code><code>VoiceDial"</code> ({{bug(1232919)}}).</li>
<li>这些新的应用程序键值已经被增加: <code>"</code><code>LaunchContacts"</code> and <code>"</code><code>LaunchPhone"</code> ({{bug(1232919)}}).</li>
<li>新的键值被增加去支持电视设备: <code>"</code><code>TV3DMode"</code>, <code>"</code><code>TVAntennaCable"</code>, <code>"</code><code>TVAudioDescription"</code>, <code>"</code><code>TVAudioDescriptionMixDown"</code>, <code>"</code><code>TVAudioDescriptionMixUp"</code>, <code>"</code><code>TVContentsMenu"</code>, <code>"</code><code>TVDataService"</code>, <code>"</code><code>TVInput"</code>, <code>"</code><code>TVInputComponent1"</code>, <code>"</code><code>TVInputComponent2"</code>, <code>"</code><code>TVInputComposite1"</code>, <code>"</code><code>TVInputComposite2"</code>, <code>"</code><code>TVInputHDMI1"</code>, <code>"</code><code>TVInputHDMI2"</code>, <code>"</code><code>TVInputHDMI3"</code>, <code>"</code><code>TVInputHDMI4"</code>, <code>"</code><code>TVInputVGA1"</code>, <code>"</code><code>TVMediaContext"</code>, <code>"</code><code>TVNetwork"</code>, <code>"</code><code>TVNumberEntry"</code>, <code>"</code><code>TVRadioService"</code>, <code>"</code><code>TVSatellite"</code>, <code>"</code><code>TVSatelliteBS"</code>, <code>"</code><code>TVSatelliteCS"</code>, <code>"</code><code>TVSatelliteToggle"</code>, <code>"</code><code>TVTerrestrialAnalog"</code>, <code>"</code><code>TVTerrestrialDigital"</code>, <code>"</code><code>TVTimer"</code>, and <code>"</code><code>DVR"</code> ({{bug(1232919)}}).</li>
<li>键值 <code>"</code><code>MediaSelect"</code> 已经被替换成标准的 <code>"</code><code>LaunchMediaPlayer"</code> 键值 ({{bug(1272592)}}).</li>
<li>Additional media player key values have been added as well. These are <code>"</code><code>MediaAudioTrack"</code>, <code>"</code><code>MediaSkipBackward"</code>, <code>"</code><code>MediaSkipForward"</code>, <code>"</code><code>MediaStepBackward"</code>, <code>"</code><code>MediaStepForward"</code>, <code>"</code><code>MediaTopMenu"</code>, <code>"</code><code>NavigateIn"</code>, <code>"</code><code>NavigateNext"</code>, <code>"</code><code>NavigateOut"</code>, and <code>"</code><code>NavigatePrevious"</code> ({{bug(1232919)}}).</li>
</ul>
<h4 id="Canvas">Canvas</h4>
<ul>
<li>{{domxref("CanvasRenderingContext2D.filter")}} 属性, 它提供支持去增加滤镜在canvas中, 现在是默认被激活的并且不再需要去偏好选项中去开启 ({{bug(1173545)}}).</li>
</ul>
<h4 id="WebGL">WebGL</h4>
<ul>
<li>{{domxref("EXT_color_buffer_float")}} {{domxref("WebGL2RenderingContext", "WebGL 2", "", 1)}} 扩展已经被实现 ({{bug(1129332)}}).</li>
<li>{{Event("webglcontextcreationerror")}} 事件, 它会被发送当 WebGL context 尝试创建但是失败的时候, 已经被实现 ({{bug(1271478)}}). 使用这个来帮助理解什么导致了错误, 可以用来调试代码和生产中的错误处理.</li>
</ul>
<h4 id="IndexedDB">IndexedDB</h4>
<ul>
<li>现在你可以重命名 IndexedDB 索引; the {{domxref("IDBIndex.name")}} 属性不再是只读的 ({{bug(1118028)}}).</li>
<li>现在你可以重命名 {{domxref("IDBObjectStore")}}s; {{domxref("IDBObjectStore.name")}} 属性不再是只读的 ({{bug(1118028)}}).</li>
</ul>
<h4 id="Service_Workers_and_related">Service Workers and related</h4>
<ul>
<li>The <a href="/en-US/docs/Web/API/Fetch_API">Fetch API</a>'s {{domxref("Response")}} object now implements the {{domxref("Response.redirected", "redirected")}} property, which indicates whether or not the response is for a request which was redirected. Please review the security related notes in the documentation before using this property ({{bug(1243792)}}).</li>
<li>In the <a href="/en-US/docs/Web/API/Permissions_API">Permissions API</a>, Firefox no longer supports the 'push' <code>PermissionDescriptor</code> dictionary type (referred to in the spec as <code>PushPermissionDescriptor</code>); this is because Firefox relies on a quota system for controlling the <code>userVisibleOnly</code> status instead, and was throwing an error when it encountered a <code>PushPermissionDescriptor</code> instance ({{bug(1266821)}}). With this dictionary removed, Firefox now simply ignores it.</li>
</ul>
<h4 id="Media_Streams">Media Streams</h4>
<ul>
<li>In the past, it was possible for a call to {{domxref("MediaDevices.getUserMedia()")}} which requests both audio and video to succeed in cases where the user has only one of the two types of hardware available. This has been fixed ({{bug(802326)}}).</li>
<li>In prior versions of Firefox, it was possible for a call to {{domxref("MediaDevices.getUserMedia()")}} which requests both audio and video to succeed even though the user denied access to one but not both of the matching devices. This has been fixed ({{bug(802326)}}). This involves minor user interface changes as well, to remove the options to choose "No audio" or "No video" when the user is prompted for permissions.</li>
<li>The {{domxref("MediaStream.getTrackById()")}} method has been implemented ({{bug(1208390)}}).</li>
</ul>
<h4 id="WebRTC">WebRTC</h4>
<ul>
<li>The {{domxref("RTCPeerConnection.addTrack()")}} method has been updated to allow tracks which are not components of the specified streams to be added to the connection. Instead, the streams are used to group tracks on the receiving end of the connection ({{bug(1271669)}}).</li>
</ul>
<h4 id="New_APIs">New APIs</h4>
<ul>
<li>{{domxref("PerformanceObserver")}} API 现在在默认是被激活的在 Nightly. 这在其他版本的Firefox 49 在默认下是无效的 ({{bug(1271487)}}).</li>
</ul>
<h4 id="Others">Others</h4>
<ul>
<li>{{domxref("XMLHttpRequest.getResponseHeader()")}} 和 {{domxref("XMLHttpRequest.getAllResponseHeaders()")}} 返回空头部在偏好选项中 <code>network.http.keep_empty_response_headers_as_empty_string</code> 被设置成 <code>true</code> ({{bug(669259)}}).</li>
<li>Firefox OS-only <a href="/en-US/docs/Archive/Firefox_OS/API/Data_Store_API">Data Store API</a> 已经被移除 ({{bug(1261009)}}).</li>
<li>The <a href="/en-US/docs/Web/API/Fullscreen_API">Fullscreen API</a> event handlers {{domxref("Document.onfullscreenchange")}} and {{domxref("Document.onfullscreenerror")}} have been removed from {{domxref("Element")}} as they were never fired there; the prefixed versions of these event handlers have been kept there for compatibility purposes, however ({{bug(1270386)}}). Note that this is not yet activated by default, but is behind the <code>full-screen-api.unprefix.enabled</code> preference ({{bug(1268749)}}).</li>
<li>The obsolete {{domxref("Document.mozFullScreen")}} property has been unprefixed to {{domxref("Document.fullscreen")}} {{bug(1269157)}}}. Note that this is not yet activated by default by behind the <code>full-screen-api.unprefix.enabled</code> preference ({{bug(1268749)}}).</li>
<li>The read-only properties {{domxref("Document.fullscreenElement")}} and {{domxref("Document.fullscreenEnabled")}} no longer throw an exception if an attempt is made to change their values; instead, the new value is silently ignored and the setter function is a no-op ({{bug(1269798)}}).</li>
<li>Any kind of data can now be retrieved from the clipboard using {{domxref("DataTransfer.getData()")}}: previously, only data of certain MIME types were supported {{bug(860857)}}.</li>
<li>Our implementation of the <a href="/en-US/docs/Web/API/Frame_Timing_API">Frame Timing API</a>, consisting of the two interfaces <code>PerformanceCompositeTiming</code> and <code>PerformanceRenderTiming</code>, has been removed as the spec has been completely rewritten ({{bug(1271846)}}).</li>
<li>To match the spec, the {{domxref("VTTCue.positionAlign")}} property now returns a <code>PositionAlign</code> enum instead of an <code>Align</code> enum ({{bug(1276129)}}).</li>
<li>The speech synthesis part of <a href="/en-US/docs/Web/API/Web_Speech_API#Speech_synthesis">Web Speech API</a> is now activated by default ({{bug(1268633)}}).</li>
<li>The <a href="/en-US/docs/Web/API/Performance_Timeline">Performance Timeline API</a> is now available by default in Nightly (though not in Aurora, Beta or Release).</li>
<li>The {{event("install")}} event, and the {{domxref("Window.oninstall")}} event handler, are now supported for <a href="/en-US/docs/Web/Manifest">Web Manifests</a> ({{bug(1265279)}}).</li>
<li>When using the {{domxref("AudioContext.createPeriodicWave()")}} method of the <a href="/en-US/docs/Web/API/Web_Audio_API">Web Audio API</a>, you can now specify whether the resulting periodic wave should be normalized by including a dictionary object as the third parameter, which includes a single parameter — <code>{disableNormalization: true}</code> ({{bug(1265405)}}).</li>
<li>In the WebVTT API, {{domxref("VTTCue.positionAlign")}} now correctly returns a <code>PositionAlignSetting</code> enum as per spec; previously it returned an <code>AlignSetting</code> enum ({{bug(1276129)}}).</li>
<li>The Speech Synthesis part of the Web Speech API is now enabled by default across all desktop browsers ({{bug(1268633)}}).</li>
<li>The {{domxref("Animation.Animation()", "Animation()")}} constructor of the <a href="/en-US/docs/Web/API/Web_Animations_API">Web Animations API</a> now accepts a null timeline ({{bug(1096776)}}).</li>
</ul>
<h3 id="MathML">MathML</h3>
<p><em>No change.</em></p>
<h3 id="SVG">SVG</h3>
<ul>
<li>移除支持不被赞成的 {{SVGElement('altGlyph')}}, {{SVGElement('altGlyphDef')}} 和 {{SVGElement('altGlyphItem')}} 元素 ({{bug(1260032)}}).</li>
</ul>
<h3 id="AudioVideo">Audio/Video</h3>
<p><em>没有改变.</em></p>
<h3 id="Plugins_and_Flash">Plugins and Flash</h3>
<p>Beginning in Firefox 49, Firefox, by default, blocks certain kinds of Flash content that aren't necessary for sites to function well. This behavior, controlled by the preference <code>browser.safebrowsing.blockedURIs.enabled</code>, helps to improve the performance of sites and Firefox in general without having significant impact on site usability. It also helps improve stability of the browsing experience by elminating a major cause of crashes. The blocked Flash modules include several used just for fingerprinting purposes, as well as a number of "supercookie" modules, and in the future may be expanded to include more types of blocked modules. See {{bug(1275591)}} for details.</p>
<p>This marks the next step in the journey toward a plugin-free future. HTML is very close to the point where plugins will no longer be needed to get the job done.</p>
<h2 id="HTTP">HTTP</h2>
<ul>
<li><code><a href="/en-US/docs/Web/HTTP/Headers/Cache-Control">Cache-Control: immutable</a></code> 指令现在已经被实现 ({{bug(1267474)}}). 另见这篇文章 <a href="https://bitsup.blogspot.de/2016/05/cache-control-immutable.html">blog post</a> 得到更多信息.</li>
<li>The {{CSP("require-sri-for")}} {{HTTPHeader("Content-Security-Policy")}} has been implemented ({{bug(1265318)}}).</li>
</ul>
<h2 id="Networking">Networking</h2>
<ul>
<li>The <a href="/en-US/docs/Mozilla/Projects/Necko/Proxy_Auto-Configuration_(PAC)_file">Proxy Auto-Configuration (PAC)</a> implementation has been updated. Now <code>weekdayRange</code>, <code>dateRange</code>, and <code>timeRange</code> support "reversed ranges", for example, <code>weekdayRange("SAT", "MON")</code> will evaluate <code>true</code> if the current day is Saturday, Sunday, or Monday ({{bug(1251332)}}).</li>
</ul>
<h2 id="Security">Security</h2>
<ul>
<li>The {{domxref("Window.isSecureContext")}} property, indicating whether a context is capable of using features that require <a href="/en-US/docs/Web/Security/Secure_Contexts">secure contexts</a>, has been implemented ({{bug(1162772)}}).</li>
</ul>
<h2 id="Compatibility">Compatibility</h2>
<p>为了增强兼容性对于现在已经存在的内容, Firefox 现在接受一些 webkit 前缀 properties and attributes.</p>
<ul>
<li> 接下来的 properties 现在依旧工作在前缀 -webkit下:
<ul>
<li>{{cssxref("-webkit-align-items")}}</li>
<li>{{cssxref("-webkit-align-content")}}</li>
<li>{{cssxref("-webkit-align-self")}}</li>
<li>{{cssxref("-webkit-animation")}}</li>
<li>{{cssxref("-webkit-animation-delay")}}</li>
<li>{{cssxref("-webkit-animation-direction")}}</li>
<li>{{cssxref("-webkit-animation-duration")}}</li>
<li>{{cssxref("-webkit-animation-fill-mode")}}</li>
<li>{{cssxref("-webkit-animation-iteration-count")}}</li>
<li>{{cssxref("-webkit-animation-name")}}</li>
<li>{{cssxref("-webkit-animation-play-state")}}</li>
<li>{{cssxref("-webkit-animation-timing-function")}}</li>
<li>{{cssxref("-webkit-backface-visibility")}}</li>
<li>{{cssxref("-webkit-background-clip")}}</li>
<li>{{cssxref("-webkit-background-origin")}}</li>
<li>{{cssxref("-webkit-background-size")}}</li>
<li>{{cssxref("-webkit-border-bottom-left-radius")}}</li>
<li>{{cssxref("-webkit-border-bottom-right-radius")}}</li>
<li>{{cssxref("-webkit-border-image")}}</li>
<li>{{cssxref("-webkit-border-top-left-radius")}}</li>
<li>{{cssxref("-webkit-border-top-right-radius")}}</li>
<li>{{cssxref("-webkit-border-radius")}}</li>
<li>{{cssxref("-webkit-box-shadow")}}</li>
<li>{{cssxref("-webkit-filter")}}</li>
<li>{{cssxref("-webkit-flex")}}</li>
<li>{{cssxref("-webkit-flex-basis")}}</li>
<li>{{cssxref("-webkit-flex-direction")}}</li>
<li>{{cssxref("-webkit-flex-flow")}}</li>
<li>{{cssxref("-webkit-flex-grow")}}</li>
<li>{{cssxref("-webkit-flex-shrink")}}</li>
<li>{{cssxref("-webkit-flex-wrap")}}</li>
<li>{{cssxref("-webkit-justify-content")}}</li>
<li>{{cssxref("-webkit-order")}}</li>
<li>{{cssxref("-webkit-perspective")}}</li>
<li>{{cssxref("-webkit-perspective-origin")}}</li>
<li>{{cssxref("-webkit-text-size-adjust")}}</li>
<li>{{cssxref("-webkit-transform")}}</li>
<li>{{cssxref("-webkit-transform-origin")}}</li>
<li>{{cssxref("-webkit-transform-style")}}</li>
<li>{{cssxref("-webkit-transition")}}</li>
<li>{{cssxref("-webkit-transition-delay")}}</li>
<li>{{cssxref("-webkit-transition-duration")}}</li>
<li>{{cssxref("-webkit-transition-property")}}</li>
<li>{{cssxref("-webkit-transition-timing-function")}}</li>
<li>{{cssxref("-webkit-user-select")}}</li>
</ul>
</li>
<li>接下来的 properties 映射到(根据猜测,这里应该是没有前缀的属性,但是很奇怪这里的prefixed没有un) the equivalent prefixed property
<ul>
<li>{{cssxref("-webkit-box-flex")}}</li>
<li>{{cssxref("-webkit-box-ordinal-group")}}</li>
<li>{{cssxref("-webkit-box-orient")}}</li>
<li>{{cssxref("-webkit-box-align")}}</li>
<li>{{cssxref("-webkit-box-pack")}}</li>
</ul>
</li>
<li>对于{{cssxref("<image>")}} 值:
<ul>
<li>接下来的功能映射到它们的没有前缀的事物: {{cssxref("-webkit-linear-gradient", "-webkit-linear-gradient()")}}, {{cssxref("-webkit-radial-gradient", "-webkit-radial-gradient()")}}, {{cssxref("-webkit-repeating-linear-gradient", "-webkit-repeating-linear-gradient()")}}, and {{cssxref("-webkit-repeating-radial-gradient","-webkit-repeating-radial-gradient()")}}.</li>
<li>The outdated <code>-webkit-gradient</code> is supported (and translated to a regular gradient)</li>
</ul>
</li>
<li>接下来的 {{cssxref("display")}} 值被转换:
<ul>
<li><code>-webkit-box</code> to <code>-moz-box</code></li>
<li><code>-webkit-flex</code> to <code>flex</code></li>
<li><code>-webkit-inline-box</code> to <code>inline-flex</code></li>
<li><code>-webkit-inline-flex</code> to <code>-moz-inline-flex</code></li>
</ul>
</li>
<li> 接下来的属性被支持 (并且不会映射到任何没有前缀的事物and don't map to any unprefixed equivalent):
<ul>
<li>{{cssxref("-webkit-text-fill-color")}}</li>
<li>{{cssxref("-webkit-text-stroke-color")}}</li>
<li>{{cssxref("-webkit-text-stroke-width")}}</li>
<li>{{cssxref("-webkit-text-stroke")}}</li>
</ul>
</li>
<li>{{domxref("WebKitCSSMatrix")}} 接口是 {{domxref("DOMMatrix")}} 的别名</li>
<li>接下来的媒体查询功能已经被实现:
<ul>
<li><code>-webkit-min-device-pixel-ratio</code> as an alias of <code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#resolution">min-resolution</a></code> with the same value (in <code>dppx)</code>, though this feature is <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1237720">disabled by default</a> (behind about:config pref <code>layout.css.prefixes.device-pixel-ratio-webkit</code>)</li>
<li><code>-webkit-max-device-pixel-ratio</code> as an alias of <code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#resolution">max-resolution</a></code> of the same value (in <code>dppx</code>); this feature is also disabled by default, behind the same about:config pref.</li>
<li><code><a href="/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#-webkit-transform-3d">-webkit-transform-3d</a></code> always matching, indicating 3d transform support.</li>
</ul>
</li>
</ul>
<h2 id="改变对于_add-on_and_Mozilla_developers">改变对于 add-on and Mozilla developers</h2>
<h3 id="WebExtensions">WebExtensions</h3>
<ul>
<li>Support for the {{WebExtAPIRef("history")}} has been added. This provides access to the browser history, with methods available for searching the history, getting information about previously-visited pages, and adding and removing history entries.</li>
<li>Added the {{WebExtAPIRef("tabs.removeCSS()")}} method to the tabs API. This method lets you remove CSS which was previously injected by calling {{WebExtAPIRef("tabs.insertCSS()")}}.</li>
</ul>
<h3 id="Interfaces">Interfaces</h3>
<ul>
<li>In {{domxref("EventTarget.addEventListener()")}}, the value <code>mozSystemGroup</code>, active only in code running in XBL or in Firefox's chrome, is a {{jsxref("Boolean")}} which indicates if the listener is added to the system group. ({{bug(1274520)}})</li>
</ul>
<h3 id="Other">Other</h3>
<p><em>没有改变.</em></p>
<h2 id="See_also">See also</h2>
<ul>
<li><a href="https://www.fxsitecompat.com/en-US/versions/49">Site Compatibility for Firefox 49</a></li>
</ul>
<h2 id="Older_versions">Older versions</h2>
<p>{{Firefox_for_developers(48)}}</p>
|