recursal/MDN huggingface dataset:
Navigator.productSub
====================

**`Navigator.productSub`** 只读属性返回当前浏览器的编译版本号。

语法
--
```

prodSub = window.navigator.productSub
```


* `prodSub`是一个字符串。
例子
--


```js
<script>
function prodsub() {
  var dt = document.getElementById("d").childNodes[0];
  dt.data = window.navigator.productSub;
}
</script>

<button onclick="prodsub();">productSub</button>
// returns: 20010725
```

注释
--

在 IE 上，这个属性返回 undefined。

在苹果 Safari 上和 Google 的 Ghrome 上这个属性总是返回 20030107。

规范
--

| Specification |
| --- |
| HTML Standard # dom-navigator-productsub-dev |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Navigator.vibrate()
===================

**`Navigator.vibrate()`** 方法使设备（有震动硬件）产生有频率的震动。若设备不支持震动，该方法将无效。若某震动方式已经在进行中（当该方法调用时），则前一个震动方式停止，新的取而代之。

该方法若因为提供无效的参数使得无法使设备震动，它将返回 false，否则返回 true。若振动方案导致长时间的震动，它会被截断：最大震动时长取决于每个浏览器的具体实现。

语法
--
```

var successBool = window.navigator.vibrate(pattern);
```


*pattern*

提供一个震动、暂停间隔的模式。每一个值表示交替震动或者暂停的毫秒数。你可以提供一个单个的值（震动一次的毫秒数）或者一个包含整数的数组来交替的震动、暂停、震动。详情参见 Vibration API (en-US)。

传递一个 `0`、一个空数组或者一个元素全部为 `0` 的数组会结束当前正在运行中的震动模式。

示例
--


```js
window.navigator.vibrate(200); // vibrate for 200ms
window.navigator.vibrate([
  100, 30, 100, 30, 100, 200, 200, 30, 200, 30, 200, 200, 100, 30, 100, 30, 100,
]); // Vibrate 'SOS' in Morse.
```

规范
--

| Specification |
| --- |
| Vibration API (Second Edition) # dom-navigator-vibrate |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

更多
--

* Vibration API (en-US)
Navigator.deviceMemory
======================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`deviceMemory`** 只读属性返回千兆字节为单位的大概的机器内存。这个值是一个 2 的次方数除以 1024，舍去小数点的近似值。并且，上下边界也用来保护那些拥有非常低端或者高端设备的用户的隐私。

语法
--
```

const memory = navigator.deviceMemory
console.log ("This device has at least " + memory + "GiB of RAM.")
```

### Value

一个浮点类型的数，0.25,0.5,1,2,4,8 之一。

Specifications
--------------

| Specification |
| --- |
| Device Memory # sec-device-memory-js-api |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
VideoPlaybackQuality.totalVideoFrames
=====================================
```

videoPlaybackQuality 的totalVideoFrames 属性为一个只读属性，用于表述已经被加载的媒体资源中已经被渲染播放或者被废弃的视频帧总数
```

Syntax
------
```

value = videoPlaybackQuality.totalVideoFrames;
```

### Value

video 容器**已经被加载的媒体资源中已经被渲染播放或者被废弃的视频帧总数，本质上讲，这个总数是指没有发生播放异常问题下的数目。**

Example
-------

下面的例子想要表述的是通过已经丢弃（丢帧）或者播放异常的帧数总和占 totalVideoFrames 的比例超过 10%，则触发一个例如名为 lostFramesThresholdExceeded 的回调函数以反应我们当前视频资源丢帧已经播放异常的程度，从而帮助业务进行调整


```js
var videoElem = document.getElementById("my\_vid");
var quality = videoElem.getVideoPlaybackQuality();

if (
  (quality.corruptedVideoFrames + quality.droppedVideoFrames) /
    quality.totalVideoFrames >
  0.1
) {
  lostFramesThresholdExceeded();
}
```


```
触发回调函数后，我们可以使用一些算法来尝试切换到需要较少带宽，码率低的，较低分辨率视频，以避免丢帧。
```

Specifications
--------------

| Specification |
| --- |
| Media Playback Quality # dom-videoplaybackquality-totalvideoframes |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* The `HTMLVideoElement.getVideoPlaybackQuality()` (en-US) method for constructing and returning this interface.
ClipboardEvent()
================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`ClipboardEvent()`** 构造函数返回一个新建的 `ClipboardEvent` 对象，这个对象表示与修改剪切板相关的事件，这些事件包括 `cut` 、 `copy` 和 `paste` 事件。

语法
--
```

var clipboardEvent = new ClipboardEvent(type[, options]);
```

### 参数

*`ClipboardEvent()` 构造函数也从* *`Event()`* *继承参数。*

*type*

一个 `DOMString` 字符串，描述了 `ClipboardEvent` 事件类型的名字，大小写敏感，可以是：`'copy'`、 `'cut'`或者 `'paste'`。

*options* **可选**

选项如下：

* `clipboardData`: 一个 `DataTransfer` containing the data concerned by the clipboard event.
* `dataType`
非标准
: A `DOMString` containing the MIME-type of the data contained in the `data` argument.
* `data`
非标准
: A `DOMString` containing the data concerned by the clipboard event.

规范
--

| Specification |
| --- |
| Clipboard API and events # dom-clipboardevent-clipboardevent |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 与复制相关的事件：`copy`, `cut`, `paste`
* 所属的 `ClipboardEvent` 接口。
ClipboardEvent.clipboardData
============================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`ClipboardEvent.clipboardData`** 属性保存了一个 `DataTransfer` 对象，这个对象可用于：

* 描述哪些数据可以由 `cut` 和 `copy` 事件处理器放入剪切板，通常通过调用 `setData(format, data)` 方法；
* 获取由 `paste` 事件处理器拷贝进剪切板的数据，通常通过调用 `getData(format)` 方法

参见 `cut` 、`copy` 和 `paste` 事件的文档以获取更多信息。

语法
--
```

data = ClipboardEvent.clipboardData
```

规范
--

| Specification |
| --- |
| Clipboard API and events # clipboardevent-clipboarddata |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 与复制相关的事件：`copy`, `cut`, `paste`
* 本对象所属的`ClipboardEvent`接口。
SourceBuffer.updating
=====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 接口的只读属性 **`updating`** 表示 `SourceBuffer` 目前是否正在更新——即当前是否有 `SourceBuffer.appendBuffer()`、`SourceBuffer.appendStream()` (en-US) 或 `SourceBuffer.remove()` 操作正在进行。

值
-

一个布尔值。

示例
--

待定

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-updating |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
SourceBuffer.mode
=================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 接口的 **`mode`** 属性用来控制媒体片段添加到 `SourceBuffer` 时的顺序是可以任意的还是有严格顺序的。

两个可用的值：

* `segments`：媒体片段的时间戳决定段的播放顺序。这些片段可以按任意顺序添加到 `SourceBuffer`。
* `sequence`：媒体片段添加到 `SourceBuffer` 的顺序决定了它们的播放顺序。片段上的时间戳为遵守此顺序自动生成。

mode 的初始值是在使用 `mediasource.addsourcebuffer()` 创建 `SourceBuffer` 时设置的。如果媒体片段上已经存在时间戳，则该值将设置为 `segments`；如果没有，则该值将设置为 `sequence`。

在 mode 初始值为 `sequence` 时，如果尝试将 mode 属性值设置为 `segments`，则会抛出异常。必须以 `sequence` 模式维护现有片段顺序。但是，可以将值从 `segments` 模式改为 `sequence` 模式。它意味着播放顺序将被固定，并会生成新的时间戳。

当 `sourceBuffer` 正在处理 `appendBuffer()` 或 `remove()`，无法更改此属性。

### 值

一个字符串。

### 异常

为该属性设置新值时可能会引发以下异常：

`InvalidAccessError` `DOMException`

当初始值为 `sequence` 时，如果尝试将 mode 的值设置为 `segments`，则抛出异常。

`InvalidStateError` `DOMException`

如果 `SourceBuffer` 对象正在更新（即它的 `SourceBuffer.updating` 属性当前为 `true`）、附加到此 `SourceBuffer` 的最后一个媒体片段是不完全的或者此 `SourceBuffer` 已从 `MediaSource` 中删除，则抛出异常。

示例
--

在此片段中，如果当前 `sourceBuffer` mode 的值为 `'segments'`，则将其更改为 `'sequence'`，从而将播放顺序更改为媒体片段的附加顺序。


```js
const curMode = sourceBuffer.mode;
if (curMode === "segments") {
  sourceBuffer.mode = "sequence";
}
```

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-mode |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
SourceBuffer.remove()
=====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 接口的 **`remove()`** 方法从 `SourceBuffer` 中移除指定时间范围的媒体片段。该方法仅能在 `SourceBuffer.updating` 为 `false` 时调用。如果 `SourceBuffer.updating` 不等于 `false`，请调用 `SourceBuffer.abort()` (en-US)。

语法
--


```js
remove(start, end)
```

### 参数

`start`

表示时间范围开始的双精度浮点数，以秒为单位。

`end`

表示时间范围结束的双精度浮点数，以秒为单位。

### 返回值

无（`undefined`）。

### 异常

`InvalidAccessError` `DOMException`

如果 `MediaSource.duration` 属性为 `NaN`、`start` 参数是负数或者大于 `MediaSource.duration`，或者 `end` 参数小于或等于 `start` 或等于 `NaN`，则抛出异常。

`InvalidStateError` `DOMException`

如果 `SourceBuffer.updating` 属性等于 `true`，或者这个 `SourceBuffer` 已经从 `MediaSource` 移除，则抛出异常。

示例
--

待定

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-remove |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
SourceBuffer.timestampOffset
============================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 接口的 **`timestampOffset`** 属性控制应用于随后附加到 SourceBuffer 的媒体片段内的时间戳偏移量。

`timestampOffset` 的初始值是 0。

值
-

一个双精度浮点数，偏移量以秒为单位。

### 异常

为该属性设置新值时可能会引发以下异常：

`InvalidStateError` `DOMException`

如果 `SourceBuffer` 对象正在更新（即它的 `SourceBuffer.updating` 属性当前为 `true`）、当前正在解析 `SourceBuffer` 内的媒体片段或者此 `SourceBuffer` 已经从 `MediaSource` 移除。

示例
--

待定

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-timestampoffset |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
SourceBuffer.appendBuffer()
===========================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 的 **`appendBuffer()`** 方法将 `ArrayBuffer`、`TypedArray` 或 `DataView` 中的媒体片段数据添加到 `SourceBuffer` 对象中。

语法
--


```js
appendBuffer(source)
```

### 参数

`source`

一个 `ArrayBuffer`、`TypedArray` 或一个 `DataView` 对象，其中包含了你想要添加到 `SourceBuffer` 的媒体片段数据。

### 返回值

无（`undefined`）。

### 异常

无。

示例
--

待定。

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-appendbuffer |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
SourceBuffer.buffered
=====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`SourceBuffer` 接口的只读属性 **`buffered`** 将当前缓冲在 `SourceBuffer` 内的时间范围作为一个规范的 `TimeRanges` 对象返回。

值
-

一个 `TimeRanges` 对象。

示例
--

待定

规范
--

| Specification |
| --- |
| Media Source Extensions™ # dom-sourcebuffer-buffered |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `MediaSource`
* `SourceBufferList`
CSS.supports()
==============

**`CSS.supports()`** 静态方法返回一个`Boolean` (en-US)值，用来校验浏览器是否支持一个给定的 CSS 特性。

语法
--
```

boolValue = CSS.supports(propertyName, value);
boolValue = CSS.supports(supportCondition);
```

### 参数

有两种不同的传值形式。第一种用来检验浏览器对于一对“属性 - 属性值”的支持：

*propertyName*

一个包含要检查的 CSS 属性名称的`DOMString`。

*value*

一个包含要检查的 CSS 属性值的`DOMString`。

第二种语法需要一个匹配`@supports`条件的参数：

*supportCondition*

一个包含了检查条件的`DOMString`。

实例
--


```js
result = CSS.supports("text-decoration-style", "blink");
result = CSS.supports("display", "flex");
result = CSS.supports("--foo", "red");
result = CSS.supports("(--foo: red)");
result = CSS.supports("( transform-origin: 5% 5% )");
result = CSS.supports(
  "( transform-style: preserve ) or ( -moz-transform-style: preserve ) or " +
    "( -o-transform-style: preserve ) or ( -webkit-transform-style: preserve )",
);
//result is true or false
```

规范
--

| Specification |
| --- |
| CSS Conditional Rules Module Level 3 # ref-for-dom-css-supports |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `@supports` at-rule 允许以声明的方式，使用相同的功能。
* `CSSSupportsRule` CSSOM 类允许在规则中操作`@supports`。
CSS.escape()
============

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`CSS.escape()`** 静态方法返回 `DOMString` 包含作为参数传递的转义字符串，主要用作 CSS 选择器的一部分。

语法
--
```

escapedStr = CSS.escape(str);
```

### 参数

*str*

The `DOMString` to be escaped.

实例
--

### 基本结果


```js
CSS.escape(".foo#bar"); // "\.foo\#bar"
CSS.escape("()[]{}"); // "\(\)\[\]\{\}"
CSS.escape("--a"); // "--a"
CSS.escape(0); // "\30 ", Unicode 代码点“0”是 30
CSS.escape("\0"); // "\ufffd", Unicode 替换字符
```

### 在上下文使用

要转义一个字符串作为选择器使用， `escape()`方法可以用于：


```js
var element = document.querySelector("#" + CSS.escape(id) + " > img");
```


`escape()`方法也可以用于转义字符串，它也转义了不严格需要转义的字符：


```js
var element = document.querySelector('a[href="#' + CSS.escape(fragment) + '"]');
```

规范
--

| Specification |
| --- |
| CSS Object Model (CSSOM) # the-css.escape()-method |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* The `CSS` interface where this static method resides.
* A polyfill for the CSS.escape
CSS 数字工厂函数
==========

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**CSS numeric factory functions**，例如 `CSS.em()` 和 `CSS.turn()`，是一组使用传入的数字参数以及所指定的单位（单位名称即所用方法名称）来返回 CSSUnitValues (en-US) 的方法。这些函数创建新的数字值，与使用 `CSSUnitValue.CSSUnitValue()` (en-US) 构造函数相比，没有后者那么冗长。语法
--
```

CSS.number(number);
CSS.percent(number);

// <length>
CSS.em(number);
CSS.ex(number);
CSS.ch(number);
CSS.ic(number);
CSS.rem(number);
CSS.lh(number);
CSS.rlh(number);
CSS.vw(number);
CSS.vh(number);
CSS.vi(number);
CSS.vb(number);
CSS.vmin(number);
CSS.vmax(number);
CSS.cm(number);
CSS.mm(number);
CSS.Q(number);
CSS.in(number);
CSS.pt(number);
CSS.pc(number);
CSS.px(number);

// <angle>
CSS.deg(number);
CSS.grad(number);
CSS.rad(number);
CSS.turn(number);

// <time>
CSS.s(number);
CSS.ms(number);

// <frequency>
CSS.Hz(number);
CSS.kHz(number);

// <resolution>
CSS.dpi(number);
CSS.dpcm(number);
CSS.dppx(number);

// <flex>
CSS.fr(number);
```

示例
--

我们使用 `CSS.vmax()` 数字工厂函数来创建一个 `CSSUnitValue` (en-US)：


```js
let height = CSS.vmax(50);

console.log(height); // CSSUnitValue {value: 50, unit: "vmax"}
console.log(height.value); // 50
console.log(height.unit); // vmax
```


在这个例子中，我们给元素设定 margin 属性值，使用 `CSS.px()` 函数：


```js
myElement.attributeStyleMap.set("margin", CSS.px(40));
let currentMargin = myElement.attributeStyleMap.get("margin");
console.log(currentMargin.value, currentMargin.unit); // 40, 'px'
```

规范
--

| Specification |
| --- |
| CSS Object Model (CSSOM) # namespacedef-css |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `CSSUnitValue.CSSUnitValue()` (en-US)
SharedWorker()
==============

**`SharedWorker()`** 构造函数实例化的 `SharedWorker` 对象可以执行指定的 URL 的脚本。所执行的脚本必须遵守 同源策略。

如果 URL 的语法无效或者违反了同源策略会抛出 `SECURITY_ERR` 类型的 `DOMException` 异常。

**备注：** 浏览器开发者对于 data URI 是否同源产生分歧。尽管 Gecko 10.0 及之后版本支持 data URIs，其他浏览器并不能支持。

语法
--


```js
var myWorker = new SharedWorker(aURL, name);
var myWorker = new SharedWorker(aURL, options);
```

### 参数

*URL 参数*

一个代表了 worker 将执行的脚本 URL 的 `DOMString`，它必须遵守同源策略。

name 可选

一个指定表示 worker 范围的`SharedWorkerGlobalScope` (en-US)的标识名称的 `DOMString`，主要用于调试。

*options* 可选

创建实例时设定的包含了可选属性的对象。可用的属性包括：

* `type`: 一个制定所创建 worker 类型的 `DOMString`。可设定的值为 `classic` 或者 `module`. 若不指定，默认值为 `classic`.
* `credentials`: 一个指定要用于工作程序的凭据类型的 `DOMString`。可设定的值为\* `omit、`\*`same-origin` 或 \*`include`. \*若不指定，*或者 type 设定为 `classic`, *默认值为* `omit` （无需凭据）。*
* \*`name`: \*一个指定表示 worker 范围的`SharedWorkerGlobalScope` (en-US)的标识名称的 `DOMString`，主要用于调试。

### Return value

创建的 worker

### Exceptions

* `SecurityError` 当文档不能正常启动 workers 时抛出
* `NetworkError` 如果其中一个脚本的 MIME 类型是 text / csv，image / \*，video / \*或 audio / \* 时抛出。类型只应该为 `text/javascript`。
* `SyntaxError` 当 *URL* 不能被解析时抛出
示例
--

以下代码段显示了使用 `SharedWorker()` 构造函数创建 `SharedWorker` 对象以及对象的后续用法：


```js
var myWorker = new SharedWorker("worker.js");

myWorker.port.start();

first.onchange = function () {
  myWorker.port.postMessage([first.value, second.value]);
  console.log("Message posted to worker");
};

second.onchange = function () {
  myWorker.port.postMessage([first.value, second.value]);
  console.log("Message posted to worker");
};

myWorker.port.onmessage = function (e) {
  result1.textContent = e.data;
  console.log("Message received from worker");
};
```


有关更完整的示例，详见基本的共享型 worker 示例（运行基本的共享型 worker）。

规范
--

| Specification |
| --- |
| HTML Standard # dom-sharedworker-dev |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

See also
--------

* The `SharedWorker` interface it belongs to.
Worker：message 事件
=================

当 worker 的父级接收到来自其 worker 的消息时（也就是说，当 worker 通过 `DedicatedWorkerGlobalScope.postMessage()` (en-US) 发送消息时），会在 `Worker` 对象上触发 `message` 事件。

此事件不能取消，也不会冒泡。

语法
--

在如 `addEventListener()` 等方法中使用事件名称，或者使用事件处理器属性。


```js
addEventListener("message", (event) => {});

onmessage = (event) => {};
```

事件类型
----

`MessageEvent`。继承自 `Event`。

Event

MessageEvent事件属性
----

*此接口也从其父接口 `Event` 继承属性。*

`MessageEvent.data` (en-US) 只读 

消息发送者发送的数据。

`MessageEvent.origin` (en-US) 只读 

一个字符串，代表消息发送者的来源。

`MessageEvent.lastEventId` (en-US) 只读 

一个字符串，代表事件的唯一 ID。

`MessageEvent.source` (en-US) 只读 

一个 `MessageEventSource`（可以是一个 WindowProxy (en-US)、`MessagePort` 或 `ServiceWorker` 对象），代表消息发送者。

`MessageEvent.ports` (en-US) 只读 

一个 `MessagePort` 对象的数组，代表与消息被发送的通道相关的端口（在适当的情况下，例如在通道消息传递或向 shared worker 发送消息时）。

示例
--

下面的代码创建了一个 worker 并使用 `addEventListener()` 监听从 worker 发来的消息：


```js
const worker = new Worker("static/scripts/worker.js");

worker.addEventListener("message", (event) => {
  console.log(`Received message from worker: ${event.data}`);
});
```


另外，也可以使用 `onmessage` 事件处理器属性进行监听：


```js
const worker = new Worker("static/scripts/worker.js");

worker.onmessage = (event) => {
  console.log(`Received message from worker: ${event.data}`);
};
```


worker 使用 `self.postMessage()` (en-US) 发出消息：


```js
// static/scripts/worker.js

self.postMessage("I'm alive!");
```

规范
--

| Specification |
| --- |
| HTML Standard # event-message |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* 相关事件：`messageerror`。
* `DedicatedWorkerGlobalScope.postMessage()` (en-US)。
Worker.terminate()
==================

`Worker` 接口中的 **`terminate()`** 方法用于立即终止 `Worker` 的行为。本方法并不会等待 worker 去完成它剩余的操作；worker 将会被立刻停止。

语法
--


```js
terminate()
```

### 参数

无。

### 返回值

无 (`undefined`)。

示例
--

以下代码示例表明，通过使用 `Worker()` 构造器创建出的 `Worker` 对象，在下一步操作之后会被立即终止。


```js
var myWorker = new Worker("worker.js");

myWorker.terminate();
```

规范
--

| Specification |
| --- |
| HTML Standard # dom-worker-terminate-dev |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

它属于 `Worker` 接口。
Worker：messageerror 事件
======================

当 `Worker` 对象接收到一条无法被反序列化的消息时，将在该对象上触发 `messageerror` 事件。

此事件不能取消，也不会冒泡。

语法
--

在如 `addEventListener()` 等方法中使用事件名称，或者设置事件处理器属性。


```js
addEventListener("messageerror", (event) => {});

onmessageerror = (event) => {};
```

事件类型
----

`MessageEvent`。继承自 `Event`。

Event

MessageEvent事件属性
----

此接口也从其父接口 `Event` 继承属性。

`MessageEvent.data` (en-US) 只读 

消息发送者发送的数据。

`MessageEvent.origin` (en-US) 只读 

一个字符串，代表消息发送者的来源。

`MessageEvent.lastEventId` (en-US) 只读 

一个字符串，代表事件的唯一 ID。

`MessageEvent.source` (en-US) 只读 

一个 `MessageEventSource`（可以是一个 WindowProxy (en-US)、`MessagePort` 或 `ServiceWorker` 对象），代表消息发送者。

`MessageEvent.ports` (en-US) 只读 

一个 `MessagePort` 对象的数组，代表与消息被发送的通道相关的端口（在适当的情况下，例如在通道消息传递或向 shared worker 发送消息时）。

示例
--

创建一个 worker，使用 `addEventListener()` 监听 `message` 和 `messageerror` 事件：


```js
// main.js

const worker = new Worker("static/scripts/worker.js");

worker.addEventListener("message", (event) => {
  console.error(`Received message from worker: ${event}`);
});

worker.addEventListener("messageerror", (event) => {
  console.error(`Error receiving message from worker: ${event}`);
});
```


同样，可以使用 `onmessageerror` 事件处理器属性监听事件：


```js
// main.js

const worker = new Worker("static/scripts/worker.js");

worker.onmessage = (event) => {
  console.error(`Received message from worker: ${event}`);
};

worker.onmessageerror = (event) => {
  console.error(`Error receiving message from worker: ${event}`);
};
```

规范
--

| Specification |
| --- |
| HTML Standard # event-messageerror |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

参见
--

* `Worker.postMessage()`
* 相关事件：`message`
Worker()
========

**`Worker()`** 构造函数创建一个 `Worker` 对象，该对象执行指定的 URL 脚本。这个脚本必须遵守 同源策略 。

如果 此 URL 有一个无效的语句，或者违反同源策略，一个 `SECURITY_ERR` 类型的`DOMException`被抛出。

**备注：** 浏览器厂商对于 data URI 是否同源存在分歧。尽管 Gecko 10.0 和之后的版本接受 data URIs，但在所有其他浏览器中并非如此。

语法
--


```js
const myWorker = new Worker(aURL, options);
```

### 参数

* 如果文档不允许启动 worker，则会引发 SecurityError
* 如果脚本之一的 MIME 类型为 `text/csv`, `image/*`, `video/*`,或 `audio/*`, 则会引发 NetworkError。它应该始终是 text/javascript。
* 如果 aURL 无法解析，则引发 SyntaxError。
* *aURL*
    + : 是一个`DOMString` 表示 **worker** 将执行的脚本的 URL。它必须遵守同源策略。
* *options* 可选
    + : 包含可在创建对象实例时设置的选项属性的对象。可用属性如下：
        - `type`：用以指定 worker 类型的 `DOMString` 值。该值可以是 `classic` 或 `module`. 如果未指定，将使用默认值 `classic.`
        - `credentials`：用以指定 worker 凭证的 `DOMString` 值。该值可以是\* `omit`\*, `same-origin`，或 *`include`.。如果未指定，或者 type 是 `classic`，将使用默认值 `omit` (不要求凭证)。*
        - \*`name`：\*在 `DedicatedWorkerGlobalScope` 的情况下，用来表示 worker 的 scope 的一个 `DOMString` 值，主要用于调试目的。
### 返回值

创建的 worker。

### 异常

* 当 document 不被允许启动 worker 的时候，将抛出一个 SecurityError 异常。例如：如果提供的 aURL 有语法错误，或者与同源策略相冲突（跨域访问）。
* 如果 worker 的 MIME 类型不正确，将抛出一个 NetworkError 异常。worker 的 MIME 类型必须是 text/javascript。
* 如果 aURL 无法被解析（格式错误），将抛出一个 SyntaxError 异常。
例子
--

下面的代码片段展示了通过 Worker() 创建 `Worker` 对象的过程，以及随后的使用方法：


```js
let myWorker = new Worker("worker.js");

first.onchange = function () {
  myWorker.postMessage([first.value, second.value]);
  console.log("Message posted to worker");
};
```


完整的例子请看 Basic dedicated worker example (run dedicated worker).

规范
--

| Specification |
| --- |
| HTML Standard # dom-worker-dev |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

**备注：** 浏览器可以被标记为对`Worker()`的完全支持尽管他并不支持一个以 modules 类型编写的脚本。截至 2019 年 8 月 1 日，暂无浏览器支持以模块类型编写的脚本。如果没有这种支持，moduleds 类型的脚本必须使用编译器翻译成无 module 代码才能在浏览器上运行。

参见
--

* `Worker` 它所属的接口。
* Web Workers API
Worker：error 事件
===============

`Worker` 接口的 **`error`** 事件会在 worker 发生错误时触发。

语法
--

在如 `addEventListener()` 等方法中使用事件名称，或者使用事件处理器属性。


```js
addEventListener("error", (event) => {});

onerror = (event) => {};
```

事件类型
----

通用的 `Event`。

示例
--

下面的代码片段使用 `Worker()` 构造函数创建了一个 `Worker` 对象，并在生成的对象上设置了一个 `onerror` 事件处理器：


```js
const myWorker = new Worker("worker.js");

myWorker.onerror = (event) => {
  console.log("There is an error with your worker!");
};
```

规范
--

| Specification |
| --- |
| HTML Standard # handler-abstractworker-onerror |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
ShadowRoot.innerHTML
====================

**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

`ShadowRoot` 接口的 **`innerHTML`** 属性设置或返回 ShadowRoot 内的 DOM 树。

句法
--
```

let domString = shadowRoot.innerHTML
// 返回

shadowRoot.innerHTML = domString;

// 设置
```

### 值

一个 `DOMString`.

规范
--

| Specification |
| --- |
| DOM Parsing and Serialization # ref-for-dom-innerhtml-innerhtml-2 |

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
ShadowRoot.mode
===============

Baseline Widely available
-------------------------

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

* Learn more
* See full compatibility
* Report feedback
**实验性:** **这是一项实验性技术**  
在将其用于生产之前，请仔细检查浏览器兼容性表格。

**`mode`** 是 `ShadowRoot` 的只读属性，它返回 `ShadowRoot` 创建时的模式 ("`open`" 或者 "`closed`") 。

当 `ShadowRoot` 的 `mode` 是 "`closed`" 时， `ShadowRoot` 的内部实现无法被 JavaScript 访问及修改 — 也就是说将该实现不公开，例如，`<video>` 标签内部实现无法被 JavaScript 访问及修改。

Syntax
------
```

var mode = shadowRoot.mode
```

### Value

值为 "`open`" 或者 "`closed`".

Specifications
--------------

| Specification |
| --- |
| DOM Standard # dom-shadowroot-mode |

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
ShadowRoot.delegatesFocus
=========================

`ShadowRoot` 接口中的只读属性 **`delegatesFocus`** 返回一个布尔值表明 delegatesFocus 是否在 shadow 被附加的时候设置了。

这目前是一个实验的非标准特性，仅在 Chrome 中可用。

语法
--
```

var df = shadowRoot.delegatesFocus
```

### 值

一个布尔值 — `true` 值表明 shadow root 已经 delegate focus, `false` 反之。

示例
--


```js
let customElem = document.querySelector('my-shadow-dom-element');
let shadow = customElem.shadowRoot;

  ...

// Does it delegate focus?
let hostElem = shadow.delegatesFocus;
```

标准
--

这目前是个非标准特性。

浏览器兼容性
------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.