recursal/MDN huggingface dataset:
Window.requestFileSystem()
==========================

这个非标准 `Window` **`requestFileSystem()`** 方法是谷歌浏览器内核用来让 web 站点或 app 获得通过沙箱访问文件系统 . 它返回 `FileSystem` 然后就可以和 file system APIs 一起使用了

**警告：** 甚至相比较如 File 和 Directory Entries API, `requestFileSystem()` 更不规范; 只有 Chrome 支持它，所有其他浏览器已经决定不支持它了。它甚至已经从规范建议单中移除了。因此*不要使用这个方法*

语法
--

**备注：** `在所有支持它的浏览器中这个方法都有 webkit 前缀` (实际上也仅有谷歌浏览器支持).
```

window.requestFileSystem(type, size, successCallback[, errorCallback]);
```

### 参数

`type`

要请求的存储类型。指定`Window.TEMPORARY` 浏览器自行决定要不要删除文件，例如低内存，或者`Window.PERSISTENT` 如果你需要文件保持在这个地方必须用户或站点或 app 明确许可。持久存储要求用户授予站点配额

`size`

你希望你的 app 被允许的使用空间大小。

`successCallback`

成功获取文件系统时调用的函数。回调接收单个参数：一个 `FileSystem` 表示应用程序有权使用的文件系统的对象。

`errorCallback` 可选

一个可选参数，指定在试图获取文件系统时发生错误或用户拒绝创建或访问文件系统的权限时调用的函数。回调接收单个参数作为输入：一个`FileError`用来描述错误的对象

### 返回值

无返回值

示例
--

规范
--

此方法已从 文件与目录条目 API 提案中移除，因此它没有成为 W3C 或者 WHATWG 的官方规范。它不再有望成为标准。

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

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

相关知识
----

* File and Directory Entries API support in Firefox
Window.getSelection
===================

返回一个 `Selection` 对象，表示用户选择的文本范围或光标的当前位置。

语法
--
```

const selection = window.getSelection() ;
```


* `selection` 是一个 `Selection` 对象。如果想要将 `selection` 转换为字符串，可通过连接一个空字符串（""）或使用 `String.toString()` 方法。
示例
--


```js
function foo() {
  let selObj = window.getSelection();
  console.log(selObj);
  let selRange = selObj.getRangeAt(0);
  // 其他代码
}
```

备注
--

在 JavaScript 中，当一个对象被传递给期望字符串作为参数的函数中时（如 `window.alert` 或 `document.write`），对象的`toString()`方法会被调用，然后将返回值传给该函数。

在上例中，`selObj.toString()` 会在传递到 `window.alert()`时自动调用。然而，当你试图在 `Selection` 对象上使用一个 JavaScript 的`String` 对象上的属性或者方法时（如 `String.prototype.length` 或者 `String.prototype.substr()`），会导致错误（如果没有相应的属性或方法时）或返回不是期望的结果（如果存在相应的属性或方法）。如果想要将 `Selection` 对象作为一个字符串使用，请直接调用 `toString()` 方法：


```js
var selectedText = selObj.toString();
```


* `selObj` 是一个`Selection` 对象，
* `selectedText` 是一个字符串（被选中的文本）。
### 相关对象

你还可以使用 `Document.getSelection()` (en-US)，两个方法等价。

值得注意的是，目前在 Firefox, Edge (非 Chromium 版本) 及 Internet Explorer 中，`getSelection()` 对 `<textarea>` 及 `<input>` 元素不起作用。 `HTMLInputElement.setSelectionRange()` 或 `selectionStart` 及 `selectionEnd` 属性可用于解决此问题。

还要注意选择不同于焦点（详见 Selection 及输入焦点）。可使用`Document.activeElement` 来返回当前的焦点元素。

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

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

相关链接
----

* HTML Editing API
* `Selection`
* `Range`
* `Document.getSelection()` (en-US)
Window：resize 事件
================

文档视图（窗口）调整大小时会触发 **`resize`** 事件。

这个事件不可取消，不会冒泡。

在一些早期的浏览器中，可以在任何 HTML 元素上注册 `resize` 事件处理器。现在仍然可以设置 `onresize` 属性或使用 `addEventListener()` 在任何元素上设置一个处理器。然而，`resize` 事件只在 `window` 对象（即由 `document.defaultView` 返回）上触发。只有在 `window` 对象上注册的处理器才能接收 `resize` 事件。

虽然现在 `resize` 事件只针对窗口触发，但你可以使用 ResizeObserver API 获得其他元素的尺寸调整通知。

如果对你的应用程序来说，调整大小事件被触发了太多次，请参阅优化 window.onresize 来控制事件触发的时间。

语法
--

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


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

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

事件类型
----

`UIEvent`。继承自 `Event`。

Event

UIEvent事件属性
----

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

`UIEvent.detail` 只读 

根据事件类型不同，返回一个带有事件细节的 `long` 值。

`UIEvent.sourceCapabilities` (en-US) 
实验性
 只读 

返回 `InputDeviceCapabilities` 接口的一个实例，它提供了生成触摸事件相关的物理设备信息。

`UIEvent.view` 只读 

返回一个 WindowProxy (en-US)，其中包含产生该事件的视图。

`UIEvent.which` 
已弃用

非标准
 只读 

返回被按下的数字键的 `keyCode`，或被按下的字母数字键的字符代码（`charCode`）。

示例
--

### 窗口大小记录器

以下示例报告了每次改变窗口大小时，窗口的尺寸。

#### HTML


```html
<p>缩放浏览器窗口以触发 <code>resize</code> 事件</p>
<p>窗口高度：<span id="height"></span></p>
<p>窗口宽度：<span id="width"></span></p>
```


#### JavaScript


```js
const heightOutput = document.querySelector("#height");
const widthOutput = document.querySelector("#width");

function reportWindowSize() {
  heightOutput.textContent = window.innerHeight;
  widthOutput.textContent = window.innerWidth;
}

window.onresize = reportWindowSize;
```


#### 结果

**备注：** 这里的例子是在 `<iframe>` 中输出的，所以报告的宽度和高度值是针对 `<iframe>` 的，而不是本页面所在的窗口。特别是，很难调整窗口的大小，以便看到报告高度的不同。

在示例本身窗口查看示例更容易观察到效果。

### addEventListener 等价形式

你也可以使用 `addEventListener()` 方法设定事件处理器：


```js
window.addEventListener("resize", reportWindowSize);
```

规范
--

| Specification |
| --- |
| CSSOM View Module # eventdef-window-resize |

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Window：queryLocalFonts() 方法
===========================

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

**`window.queryLocalFonts()`** 方法返回一个兑现一个表示本地可用字体的 `FontData` 对象数组的 `Promise`。

要使用此方法，用户必须同意授予 `local-fonts` 权限（可以通过 Permissions API (en-US) 查询权限状态）。此外，此功能可能会被服务器上设置的权限策略阻止。

语法
--


```js
queryLocalFonts(options)
```

### 参数

`options` 可选

包含可选配置参数。目前仅定义了一个属性：

`postscriptNames` 可选

一个包含字体 PostScript 名称的数组。如果指定了此项，则只有 PostScript 名称与数组中的 PostScript 名称匹配的字体才会包含在结果中；如果没有，所有字体都将包含在结果中。


### 返回值

一个兑现一个表示本地可用字体的 `FontData` 对象数组的 `Promise`。

### 异常

`NotAllowedError` `DOMException`

首次调用该方法后，当浏览器出现权限提示时，用户选择拒绝授予此功能的权限。

`SecurityError` `DOMException`

此特性的使用被权限策略阻止，或者不是通过用户交互（如按下按钮）调用此特性，或当前的源不透明。

示例
--

有关实时演示，请参阅字体选择演示。

### 字体枚举

以下代码片段将查询所有可用的字体并打印元数据。例如，这可以用于填充字体选择器控件。


```js
async function logFontData() {
  try {
    const availableFonts = await window.queryLocalFonts();
    for (const fontData of availableFonts) {
      console.log(fontData.postscriptName);
      console.log(fontData.fullName);
      console.log(fontData.family);
      console.log(fontData.style);
    }
  } catch (err) {
    console.error(err.name, err.message);
  }
}
```

### 限制返回结果

要将返回的字体数据限制为特定的字体列表，使用 `postscriptNames` 选项。


```js
async function returnSpecificFonts() {
  const availableFonts = await window.queryLocalFonts({
    postscriptNames: ["Verdana", "Verdana-Bold", "Verdana-Italic"],
  });

  return availableFonts;
}
```

### 访问底层数据

`blob()` 方法提供对底层 SFNT 数据的访问——这是一种可以包含其他字体格式的字体文件格式，例如 PostScript、TrueType、OpenType 或 Web 开放字体格式（WOFF）。


```js
async function computeOutlineFormat() {
  try {
    const availableFonts = await window.queryLocalFonts({
      postscriptNames: ["ComicSansMS"],
    });
    for (const fontData of availableFonts) {
      // `blob()` 方法返回一个包含有效且完整的 SFNT 封装字体数据的 Blob。
      const sfnt = await fontData.blob();
      // 仅裁剪出我们需要的字节部分：前 4 个字节是 SFNT 版本信息。
      // 规范：https://learn.microsoft.com/zh-cn/typography/opentype/spec/otff#organization-of-an-opentype-font
      const sfntVersion = await sfnt.slice(0, 4).text();

      let outlineFormat = "UNKNOWN";
      switch (sfntVersion) {
        case "\x00\x01\x00\x00":
        case "true":
        case "typ1":
          outlineFormat = "truetype";
          break;
        case "OTTO":
          outlineFormat = "cff";
          break;
      }
      console.log("矢量字体格式：", outlineFormat);
    }
  } catch (err) {
    console.error(err.name, err.message);
  }
}
```

规范
--

| Specification |
| --- |
| Local Font Access # dom-window-querylocalfonts |

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

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

参见
--

* Local Font Access API
* 使用带有本地字体的高级排版
* `@font-face`
Window：paste 事件
===============

当用户通过浏览器的用户界面发起一个“粘贴”动作时，将触发 **`paste`** 事件。

该事件的原始目标是 `Element`，它是粘贴动作的预期目标。你可以在 `Window` 接口上监听这个事件，以便在捕获或冒泡阶段处理它。关于此事件的全部细节，请参见 Element：paste 事件的页面。

语法
--

在类似于 `addEventListener()` 这样的方法中使用事件名，或设置事件处理器属性。


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

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

事件类型
----

`ClipboardEvent`。继承自 `Event`。

Event

ClipboardEvent示例
--


```js
window.addEventListener("paste", (event) => {
  console.log("已发起粘贴！");
});
```

规范
--

| Specification |
| --- |
| Clipboard API and events # clipboard-event-paste |
| HTML Standard # handler-onpaste |

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

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

参见
--

* 相关联事件：`cut`、`copy`
* `Element` 目标上的这个事件：`paste`
* `Document` 目标上的这个事件：`paste` (en-US)
Window：deviceorientation 事件
===========================

**`deviceorientation`** 事件在方向传感器输出新数据的时候触发。其数据系传感器与地球坐标系相比较所得，也就是说在设备上可能会采用设备地磁计的数据。

参见有关方向与运动信息的说明。

该事件不可取消也不会冒泡。

语法
--

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


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

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

事件类型
----

一个 `DeviceOrientationEvent`。继承了 `Event`。

Event

DeviceOrientationEvent事件属性
----

`DeviceOrientationEvent.absolute` 只读 

一个布尔值，表示设备是否提供了方向数据。

`DeviceOrientationEvent.alpha` 只读 

一个数字，表示设备围绕 z 轴的转动度数，范围为 0（含）到 360（不含）。

`DeviceOrientationEvent.beta` 只读 

一个数字，表示设备围绕 x 轴的转动度数，范围为 -180（含）到 180（不含）。表示设备的前后运动。

`DeviceOrientationEvent.gamma` 只读 

一个数字，表示设备围绕 y 轴的转动度数，范围为 -90（含）到 90（不含）。表示设备的左右运动。

`DeviceOrientationEvent.webkitCompassHeading` 
非标准
 只读 

一个数字，表示设备所得到的世界坐标系的 z 轴与正北方向的角度，范围为 0 到 360。

`DeviceOrientationEvent.webkitCompassAccuracy` 
非标准
 只读 

指南针的精准度，以正/负偏差的形式给出。通常是 10。

示例
--


```js
if (window.DeviceOrientationEvent) {
  window.addEventListener(
    "deviceorientation",
    function (event) {
      // alpha: rotation around z-axis
      var rotateDegrees = event.alpha;
      // gamma: left to right
      var leftToRight = event.gamma;
      // beta: front back motion
      var frontToBack = event.beta;

      handleOrientationEvent(frontToBack, leftToRight, rotateDegrees);
    },
    true,
  );
}

var handleOrientationEvent = function (
  frontToBack,
 leftToRight,
 rotateDegrees,
) {
  // do something amazing
};
```

规范
--

| Specification |
| --- |
| DeviceOrientation Event Specification # deviceorientation |
| DeviceOrientation Event Specification # ref-for-dom-window-ondeviceorientation |

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

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

参见
--

* `devicemotion`
* 检测设备朝向
* 有关方向与运动信息的说明
Window.innerWidth
=================

只读的 `Window` 属性 **`innerWidth`** 返回以像素为单位的窗口的内部宽度。如果垂直滚动条存在，则这个属性将包括它的宽度。

更确切地说，`innerWidth` 返回窗口的 layout viewport (en-US) 的宽度。窗口的内部高度——布局视口的高度——可以从 `innerHeight` 属性中获取到。

语法
--
```

let intViewportWidth = window.innerWidth;
```

### 值

一个整数型的值表示窗口的布局视口宽度是以像素为单位的。这个属性是只读的，并且没有默认值。

若要更改窗口的宽度，请使用 `Window` 的方法来调整窗口的大小，例如`resizeBy()` 或者 `resizeTo()`。

使用说明
----

如果你需要获取除去滚动条和边框的窗口宽度，请使用根元素 `<html>` 的`clientWidth` 属性。

`innerWidth` 属性在任何表现类似于窗口的任何窗口或对象（例如框架或选项卡）上都是可用的。

示例
--


```js
// 返回视口的宽度
var intFrameWidth = window.innerWidth;

// 返回一个框架集内的框架的视口宽度
var intFrameWidth = self.innerWidth;

// 返回最近的父级框架集的视口宽度
var intFramesetWidth = parent.innerWidth;

// 返回最外层框架集的视口宽度
var intOuterFramesetWidth = top.innerWidth;
```

规范
--

| Specification |
| --- |
| CSSOM View Module # dom-window-innerwidth |

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

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

参考
--

* `window.outerWidth`
* `window.innerHeight`
* `window.outerHeight`
gamepadconnected
================

`gamepadconnected` 事件会在浏览器检测到游戏控制器第一次连接或者第一次按下游戏键/摇杆的时候触发。

基本信息
----

文档

Gamepad

类型

事件

冒泡

No

可取消

No

Target

DefaultView (`<window>`)

默认操着

无

属性
--

| Property | Type | Description |
| --- | --- | --- |
| `target` 只读 | `DOMString` | 事件目标（DOM 树中的顶层，即 document.documentElement）。 |
| `type` 只读 | `EventTarget` | 事件的类型。 |
| `bubbles` 只读 | `Boolean` | 事件是否正常冒泡。 |
| `cancelable` 只读 | `Boolean` | 事件是否可以取消。 |
| `gamepad` 只读 | `Gamepad` | 单个游戏手柄属性，可用于访问关联游戏手柄的数据。 |

示例
--


```js
// 请注意，在实现该 API 的浏览器中，该 API 仍为供应商前缀
window.addEventListener("gamepadconnected", function (event) {
  // 所有按钮和轴值均可通过以下方式访问
  event.gamepad;
});
```

规范
--

| Specification |
| --- |
| Gamepad # event-gamepadconnected |

相关事件
----

* gamepaddisconnected (en-US)
还可以参考
-----

* Using Gamepad API (en-US)
Window.frames
=============

概要
--

返回当前窗口，一个类数组对象，列出了当前窗口的所有直接子窗口。

语法
--
```

frameList = window.frames;
```


* frameList 是一个 frame 对象的集合，它类似一个数组，有 length 属性且可以使用索引（[i]）来访问。
* `frameList === window` 计算结果为 true。
* 在 window.frames 类数组中的每一项都代表了窗口对应给定对象的<frame>或<iframe>的内容，而不是 (i)frame DOM 元素（即 window.frames[ 0 ] 与 document.getElementsByTagName( "iframe" )[ 0 ].contentWindow 是相同的）。
* 有关返回值的更多详细信息，请参考 thread on mozilla.dev.platform 。
实例
--


```js
var frames = window.frames; // 或 // var frames = window.parent.frames;
for (var i = 0; i < frames.length; i++) {
  // 在这对 frames 的一个 frame 做点什么
  frames[i].document.body.style.background = "red";
}
```

规范
--

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

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Window: hashchange event
========================

当 URL 的片段标识符更改时，将触发**hashchange**事件 (跟在＃符号后面的 URL 部分，包括＃符号)

|  |  |
| --- | --- |
| Bubbles | Yes |
| Cancelable | No |
| Interface | `HashChangeEvent` |
| Event handler | `onhashchange` |

示例
--

你可以在 `addEventListener` 方法中使用 `hashchange` 事件：


```js
window.addEventListener(
  "hashchange",
  function () {
    console.log("The hash has changed!");
  },
  false,
);
```


或使用 `onhashchange` 事件处理程序属性：


```js
function locationHashChanged() {
  if (location.hash === "#cool-feature") {
    console.log("You're visiting a cool feature!");
  }
}

window.onhashchange = locationHashChanged;
```

规范
--

| Specification |
| --- |
| HTML Standard # event-hashchange |
| HTML Standard # handler-window-onhashchange |

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

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

参见
--

* `popstate`
* `WindowEventHandlers.onhashchange`
Window.dump()
=============

**非标准:** 该特性是非标准的，请尽量不要在生产环境中使用它！

概要
--

将信息打印到 (本地) 控制台（console）.

语法
--
```

window.dump(message);

dump(message);
```


* `message` 是要打印的字符串
注解
--

`dump()`的常见用途是调试 JavaScript。`dump`如果使用`console`选项启动了 Firefox 进程，则将消息发送到系统控制台（本地控制台）。如果`console`未指定该选项，则输出到对应终端。dump() 的输出不会发送到浏览器控制台。输出可以使用console.log（）发送到浏览器控制台。特殊的代码还能将消息记录到错误控制台 / 浏览器控制台。`Components.utils.reportError``nsIConsoleService`

`dump()`也可用于使用 JavaScript 实现的 XPCOM 组件，尽管 `window` 不是组件中的全局对象。它也明确地在沙箱中提供。但是，这种使用`dump`不受下面提到的偏好的影响 --- 它将始终显示出来。因此，建议你自己检查此偏好或使用自己的调试偏好，以确保在根本不感兴趣的情况下，不会向用户的控制台发送大量调试内容。请注意，`dump`XPCOM 组件的输出将转到`stderr`，而`dump`其他地方将输出`stdout`。

Gecko 在默认情况 **dump()** 下被禁用 - 它不会做任何事情，但也不会引起错误。要查看`dump`输出，你必须通过设置首选项`browser.dom.window.dump.enabled`来启用它。你可以在about：config或user.js 文件中设置首选项。注意：`about:config`默认情况下不会列出此首选项，你可能需要创建它（右键单击内容区域 - >新建 - >布尔值）。

在 Windows 上，你需要一个控制台才能看到任何东西。如果你还没有，请关闭应用程序并使用命令行参数重新打开`console`应该创建控制台或使用`-attach-console`现有的控制台。在其他操作系统上，从终端启动应用程序就足够了。

要将控制台输出重定向到文件，请运行 firefox *而不*使用-console 选项，并使用语法将 stderr 和 stdout 重定向到一个文件，即：
```

firefox > console.txt 2>&1
```


**备注：** 如果你希望控制台消息出现在用于启动应用程序的控制台中，则可以使用Gecko 控制台重定向器。预编译的二进制文件可以在压缩的归档文件 https://github.com/matthewkastor/Redirector/archive/master.zip 中找到，`Redirector-master\Gecko\Console Redirector\bin\Release`将所有 dll 和 exe 复制到任何你想要的地方。然后跑`Console Redirector.exe /?`

Specification
-------------

这不是标准的一部分
window.clearImmediate
=====================

概述
--

此方法用来清除 `window.setImmediate`.

**备注：** 该方法最近刚刚被微软提出，可能不会被 w3c 批准成为标准，目前只有最新版 Internet Explorer 实现了该方法。

语法
--


```js
clearImmediate(immediateID)
```


这里的 immediateID 是由`window.setImmediate`返回的。

例子
--


```js
var immediateID = setImmediate(function () {
  // Run some code
}

document.getElementById("button").addEventListener(function () {
  clearImmediate(immediateID);
}, false);
```

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

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

相关链接
----

`window.setImmediate`
Specification: Efficient Script Yielding
Window: rejectionhandled event
==============================

当 `Promise` 被 `rejected` 且有 `rejection` 处理器时会在全局触发 **`rejectionhandled`** 事件 (通常是发生在 window 下，但是也可能发生在 Worker 中)。应用于调试一般应用回退。当 `Promise` 被 `rejected` 且没有 `rejection` 处理器处理时会触发 **`unhandledrejection`** 事件。这两个事件协同工作。

|  |  |
| --- | --- |
| 是否冒泡 | No |
| 是否可取消 | No |
| 接口 | PromiseRejectionEvent |
| 事件处理器属性 | onrejectionhandled |

示例
--

你可以使用`rejectionhandled 事件在控制台打印出被 rejected 的 Promise，以及被 rejected 的原因：`


```js
window.addEventListener(
  "rejectionhandled",
  (event) => {
    console.log("Promise rejected; reason: " + event.reason);
  },
  false,
);
```

规范
--

| Specification |
| --- |
| HTML Standard # unhandled-promise-rejections |
| HTML Standard # handler-window-onrejectionhandled |

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

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

参见
--

* Promise 拒绝事件
* `PromiseRejectionEvent`
* `Promise`
* `unhandledrejection`
window.opener
=============

### 概述

返回打开当前窗口的那个窗口的引用，例如：在 window A 中打开了 window B，B.opener 返回 A.

### 语法
```

var objRef = window.opener;
```

### 例子


```js
if (window.opener != indexWin) {
  referToTop(window.opener);
}
```

### 备注

如果当前窗口是由另一个窗口打开的，**window.opener**保留了那个窗口的引用。如果当前窗口不是由其他窗口打开的，则该属性返回 null.

规范
--

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

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

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

获取/设置窗口的名称。

语法
--
```

string = window.name;
window.name = string;
```

示例
--


```js
window.name = "lab\_view";
```

备注
--

窗口的名字主要用于为超链接和表单设置目标（targets）。窗口不需要有名称。

在某些框架里（如，SessionVars 和 Dojo's dojox.io.windowName ，该属性也被用于作为 JSONP 的一个更安全的备选，来提供跨域通信（cross-domain messaging）。现代 web 应用应使用 postMessage API 进行敏感的跨域通信。

`window.name` 会调用 `toString` 将赋给它的值转换成对应的字符串表示。

（译注：此处似有不妥，私以为调用的应是 `ToString` 抽象方法。事实上，如果将一个 Symbol 类型的值赋给 `window.name`，会报 `TypeError`，而非调用 `Symbol.toString()` 转换成字符串后进行赋值。例如：


```js
window.name = Symbol.for("foo"); // TypeError
window.name = Symbol.for("foo").toString(); // "Symbol(foo)"
```


具体可参见 EMCA 语言规范中 Type Conversion 一节。）

规范
--

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

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

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Window：afterprint 事件
====================

在关联的文档开始打印或关闭打印预览后，将触发 **`afterprint`** 事件。

`beforeprint` 和 `afterprint` 事件允许页面在打印开始之前更改其内容（例如，也许是移除 banner）然后在打印完成后还原这些更改。一般来说，你应该更倾向于使用 `@media print` CSS at 规则，但在某些情况下可能有必要使用这些事件。

语法
--

在像 `addEventListener()` 的方法中使用事件名称，或设置事件处理属性。


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

事件类型
----

一个通用的 `Event`。

示例
--

使用 `addEventListener()`：


```js
window.addEventListener("afterprint", (event) => {
  console.log("打印后");
});
```


使用 `onafterprint` 事件处理属性：


```js
window.onafterprint = (event) => {
  console.log("打印后");
};
```

规范
--

| Specification |
| --- |
| HTML Standard # event-afterprint |
| HTML Standard # handler-window-onafterprint |

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

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

参见
--

* 相关事件：`beforeprint`
Window.scrollTo()
=================

摘要
--

滚动到文档中的某个坐标。

语法
--
```

window.scrollTo(x-coord,y-coord )

window.scrollTo(options)
```

### 参数

* `x-coord` 是文档中的横轴坐标。
* `y-coord` 是文档中的纵轴坐标。
* `options` 是一个包含三个属性的对象：

1. `top` 等同于 `y-coord`
2. `left` 等同于 `x-coord`
3. `behavior` *类型 String，表示滚动行为，支持参数 smooth(平滑滚动),instant(瞬间滚动),默认值 auto*
例子
--
```

window.scrollTo( 0, 1000 );

// 设置滚动行为改为平滑的滚动
window.scrollTo({
    top: 1000,
    behavior: "smooth"
});
```

注意
--

该函数实际上和 window.scroll (en-US)是一样的。相对滚动可以参考 window.scrollBy (en-US)，window.scrollByLines (en-US)，和 window.scrollByPages。

规范
--

| Specification |
| --- |
| CSSOM View Module # dom-window-scrollto |

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

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

`Window` 对象的 **`onappinstalled`** 属性用于处理 `appinstalled` 事件，该事件是一个实现了 `Event`接口的简单事件，会在网页应用成功安装为渐进式网页应用时立即触发。

语法
--
```

window.onappinstalled = function(event) { ... };
```

示例
--


```js
window.onappinstalled = function (ev) {
  console.log("The application was installed.");
};
```

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

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

相关文章
----

* `Event`
window.navigator
================

只读属性 **`Window.navigator`** 会返回一个 `Navigator` 对象的引用，可以用于请求运行当前代码的应用程序的相关信息。

语法
--
```

navigatorObject = window.navigator
```

例子
--

### 例子 #1：检测浏览器并返回浏览器名称字符串


```js
var sBrowser,
  sUsrAg = navigator.userAgent;

// The order matters here, and this may report false positives for unlisted browsers.

if (sUsrAg.indexOf("Firefox") > -1) {
  sBrowser = "Mozilla Firefox";
  // "Mozilla/5.0 (X11; Ubuntu; Linux x86\_64; rv:61.0) Gecko/20100101 Firefox/61.0"
} else if (sUsrAg.indexOf("Opera") > -1 || sUsrAg.indexOf("OPR") > -1) {
  sBrowser = "Opera";
  //"Mozilla/5.0 (Macintosh; Intel Mac OS X 10\_14\_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 OPR/57.0.3098.106"
} else if (sUsrAg.indexOf("Trident") > -1) {
  sBrowser = "Microsoft Internet Explorer";
  // "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Zoom 3.6.0; wbx 1.0.0; rv:11.0) like Gecko"
} else if (sUsrAg.indexOf("Edge") > -1) {
  sBrowser = "Microsoft Edge";
  // "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299"
} else if (sUsrAg.indexOf("Chrome") > -1) {
  sBrowser = "Google Chrome or Chromium";
  // "Mozilla/5.0 (X11; Linux x86\_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36"
} else if (sUsrAg.indexOf("Safari") > -1) {
  sBrowser = "Apple Safari";
  // "Mozilla/5.0 (iPhone; CPU iPhone OS 11\_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1 980x1306"
} else {
  sBrowser = "unknown";
}

alert("当前浏览器为：" + sBrowser);
```

### 例子 #2：检测浏览器并返回代表当前浏览器的索引数字


```js
function getBrowserId() {
  var aKeys = ["MSIE", "Firefox", "Safari", "Chrome", "Opera"],
    sUsrAg = navigator.userAgent,
    nIdx = aKeys.length - 1;

  for (nIdx; nIdx > -1 && sUsrAg.indexOf(aKeys[nIdx]) === -1; nIdx--);

  return nIdx;
}

console.log(getBrowserId());
```

规范
--

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

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

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

参见
--

*
Window.ondevicemotion
=====================

摘要
--

一个发送到窗口的`devicemotion`事件处理程序。

语法
--
```

window.ondevicemotion = funcRef;
```


Where `funcRef` is a reference to a function. This function receives a `DeviceMotionEvent` object describing the motion that occurred.

这里的`funcRef`是一个函数的引用。这个函数接收一个`DeviceMotionEvent` 对象类型的参数描述发生的动作。

规范
--

| Specification |
| --- |
| DeviceOrientation Event Specification # devicemotion |
| DeviceOrientation Event Specification # ref-for-dom-window-ondevicemotion |

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

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

参考
--

* `devicemotion`
* `DeviceMotionEvent`
* Detecting device orientation
Window.fullScreen
=================

概述
--

这个属性表明了窗口是否处于全屏模式下。仅在 Gecko 1.9（Firefox 3）以及之后的版本中有意义，详情参见后附备注。

语法
--
```

isInFullScreen = windowRef.fullScreen;
```


在取得 chrome privileges 的情况下，这个属性是可读写的，否则将是只读属性。如果你试图在未取得 chrome privileges 的情况下设置这个属性，虽然实际上修改会失败，却并不会抛出错误。这是为了阻止在 IE 浏览器中意图通过修改这个属性而进行恶意攻击的脚本。

返回值
---

`isInFullScreen`

一个布尔值。可能的值如下：

* `true`: 窗口处于全屏模式下。
* `false`: 窗口未处于全屏模式下。

示例
--
```

if (window.fullScreen) {
    // it's fullscreen!
} else {
    // not fullscreen!
}
```

规范
--

DOM 0 级。window.fullScreen 并不属于任何 W3C 规范或技术推荐中。

备注
--

* 这个属性仅在 Mozilla 1.9（Firefox 3）及之后才有意义。Mozilla 1.8 及早期版本确实有这个属性，但它总是返回 false，即使在窗口确实处于全屏模式的情况下 (Firefox bug 127013)。
* 在常规窗口与全屏窗口之间切换会在相应的窗口中触发“resize”事件。