1. 8.9 系统状态和功能
      1. 8.9.1 Navigator 对象
        1. 8.9.1.1 客户端识别
        2. 8.9.1.2 语言偏好
        3. 8.9.1.3 浏览器状态
        4. 8.9.1.4 自定义方案处理程序:registerProtocolHandler() 方法
          1. 8.9.1.4.1 安全和隐私
          2. 8.9.1.4.2 用户代理自动化
        5. 8.9.1.5 Cookie
        6. 8.9.1.6 PDF 查看支持

8.9 系统状态和功能

8.9.1 Navigator 对象

Navigator

所有当前引擎均支持。

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (旧版)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

Navigator 的实例表示用户代理(客户端)的身份和状态。它们还充当一个通用全局对象,各种 API 在本规范和其他规范中都位于该对象下。

[Exposed=Window]
interface Navigator {
  // objects implementing this interface also implement the interfaces given below
};
Navigator includes NavigatorID;
Navigator includes NavigatorLanguage;
Navigator includes NavigatorOnLine;
Navigator includes NavigatorContentUtils;
Navigator includes NavigatorCookies;
Navigator includes NavigatorPlugins;
Navigator includes NavigatorConcurrentHardware;

这些接口混合被单独定义,以便WorkerNavigator 可以重用Navigator 接口的部分内容。

每个Window 都有一个关联的 Navigator,它是一个Navigator 对象。在创建Window 对象时,其关联的 Navigator 必须设置为在Window 对象的相关领域中创建的一个新的Navigator 对象。

Window/navigator

所有当前引擎均支持。

Firefox1+Safari1+Chrome1+
Opera3+Edge79+
Edge (旧版)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

navigatorclientInformation 获取器步骤是返回自身关联的 Navigator

8.9.1.1 客户端识别
interface mixin NavigatorID {
  readonly attribute DOMString appCodeName; // constant "Mozilla"
  readonly attribute DOMString appName; // constant "Netscape"
  readonly attribute DOMString appVersion;
  readonly attribute DOMString platform;
  readonly attribute DOMString product; // constant "Gecko"
  [Exposed=Window] readonly attribute DOMString productSub;
  readonly attribute DOMString userAgent;
  [Exposed=Window] readonly attribute DOMString vendor;
  [Exposed=Window] readonly attribute DOMString vendorSub; // constant ""
};

在某些情况下,尽管整个行业付出了最大的努力,但网络浏览器仍然存在错误和限制,网页作者被迫绕过这些问题。

本节定义了一组属性,可用于从脚本中确定正在使用的用户代理类型,以便解决这些问题。

用户代理具有navigator 兼容模式,该模式为 ChromeGeckoWebKit 之一。

navigator 兼容模式NavigatorID 混合限制为属性值的组合以及taintEnabled()oscpu 的存在,这些属性值和存在情况已知与现有网络内容兼容。

客户端检测应始终限于检测已知的当前版本;应始终假设未来的版本和未知的版本完全兼容。

self.navigator.appCodeName

返回字符串“Mozilla”。

self.navigator.appName

返回字符串“Netscape”。

self.navigator.appVersion

返回浏览器的版本。

self.navigator.platform

返回平台的名称。

self.navigator.product

返回字符串“Gecko”。

window.navigator.productSub

返回字符串“20030107”或字符串“20100101”。

self.navigator.userAgent

Navigator/userAgent

所有当前引擎均支持。

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

WorkerNavigator/userAgent

所有当前引擎均支持。

Firefox3.5+Safari4+Chrome4+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer10+
Firefox Android?Safari iOS5+Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

返回完整的 `User-Agent` 标头。

window.navigator.vendor

返回空字符串、字符串“Apple Computer, Inc.”或字符串“Google Inc.”。

window.navigator.vendorSub

返回空字符串。

appCodeName

必须返回字符串“Mozilla”。

appName

必须返回字符串“Netscape”。

appVersion

必须返回以“5.0 (”开头的适当字符串,如下所示

trail默认 `User-Agent` 值 中“Mozilla/”前缀之后的子字符串。

如果navigator 兼容模式ChromeWebKit

返回 trail

如果navigator 兼容模式Gecko

如果 trail 以“5.0 (Windows”开头,则返回“5.0 (Windows)”。

否则,返回 trail 的前缀,直到但不包括第一个 U+003B (;),并与字符 U+0029 右括号连接。例如,“5.0 (Macintosh)”、“5.0 (Android 10)”或“5.0 (X11)”。

platform

必须返回一个字符串,表示浏览器正在执行的平台(例如“MacIntel”、“Win32”、“Linux x86_64”、“Linux armv81”),或者出于隐私和兼容性考虑,返回另一个平台上通常返回的字符串。

product

必须返回字符串“Gecko”。

productSub

必须从以下列表中返回适当的字符串

如果navigator 兼容模式ChromeWebKit

字符串“20030107”。

如果navigator 兼容模式Gecko

字符串“20100101”。

userAgent

必须返回默认 `User-Agent` 值

vendor

必须从以下列表中返回适当的字符串

如果navigator 兼容模式Chrome

字符串“Google Inc.”。

如果navigator 兼容模式Gecko

空字符串。

如果navigator 兼容模式WebKit

字符串“Apple Computer, Inc.”。

vendorSub

必须返回空字符串。

如果navigator 兼容模式Gecko,则用户代理还必须支持以下部分接口

partial interface mixin NavigatorID {
  [Exposed=Window] boolean taintEnabled(); // constant false
  [Exposed=Window] readonly attribute DOMString oscpu;
};

taintEnabled() 方法必须返回 false。

oscpu 属性的获取器必须返回空字符串或一个表示浏览器正在执行的平台的字符串,例如“Windows NT 10.0; Win64; x64”、“Linux x86_64”。

(这是一个跟踪向量。) 此 API 中任何因用户而异的信息都可用于分析用户。事实上,如果提供了足够此类信息,实际上可以唯一识别用户。因此,强烈建议用户代理实现者在此 API 中包含尽可能少的信息。

8.9.1.2 语言偏好
interface mixin NavigatorLanguage {
  readonly attribute DOMString language;
  readonly attribute FrozenArray<DOMString> languages;
};
self.navigator.language

Navigator/language

所有当前引擎均支持。

Firefox1+Safari1+Chrome1+
Opera4+Edge79+
Edge (旧版)12+Internet Explorer11
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

WorkerNavigator/language

所有当前引擎均支持。

Firefox3.5+Safari10+Chrome4+
Opera4+Edge79+
Edge (旧版)12+Internet Explorer11
Firefox Android4+Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android10.1+

返回一个表示用户首选语言的语言标签。

self.navigator.languages

Navigator/languages

所有当前引擎均支持。

Firefox32+Safari10.1+Chrome37+
Opera24+Edge79+
Edge (旧版)16+Internet Explorer不支持
Firefox AndroidSafari iOSChrome AndroidWebView Android37+Samsung Internet3.0+Opera Android24+

WorkerNavigator/languages

所有当前引擎均支持。

Firefox32+Safari10.1+Chrome37+
Opera24+Edge79+
Edge (旧版)16+Internet Explorer不支持
Firefox AndroidSafari iOSChrome AndroidWebView Android37+Samsung Internet3.0+Opera Android24+

返回一个包含用户首选语言的语言标签数组,最首选的语言排在首位。

最首选的语言是由 navigator.language 返回的。

当用户代理对用户首选语言的理解发生变化时,会在 WindowWorkerGlobalScope 对象上触发 languagechange 事件。

language

必须返回一个有效的 BCP 47 语言标签,表示 合理的语言 或用户最首选的语言。 [BCP47]

languages

必须返回一个 冻结数组,包含有效的 BCP 47 语言标签,表示一个或多个 合理的语言,或用户首选的语言,按偏好顺序排列,最首选的语言排在首位。在用户代理需要返回不同的值或以不同顺序返回值之前,必须返回相同的对象。 [BCP47]

每当用户代理需要使 navigator.languages 属性(属于 WindowWorkerGlobalScope 对象 global)返回一组新的语言标签时,用户代理必须在给定 globalDOM 操作任务源排队一个全局任务,以在 global触发一个名为 languagechange 的事件,并在该任务开始执行之前等待,然后才能真正返回新值。

为了确定 合理的语言,用户代理应牢记以下几点

(这是一个跟踪向量。) 为了避免引入任何更多指纹向量,用户代理应为此函数中定义的 API 使用与 HTTP `Accept-Language` 标头相同的列表。

interface mixin NavigatorOnLine {
  readonly attribute boolean onLine;
};
self.navigator.onLine

Navigator/onLine

所有当前引擎均支持。

Firefox1.5+Safari4+Chrome2+
Opera3+Edge79+
Edge (旧版)12+Internet Explorer4+
Firefox Android4+Safari iOSChrome Android18+WebView Android🔰 37+Samsung InternetOpera Android10.1+

WorkerNavigator/onLine

所有当前引擎均支持。

Firefox3.5+Safari4+Chrome4+
Opera10.6+Edge79+
Edge (旧版)12+Internet Explorer10+
Firefox Android4+Safari iOS5+Chrome AndroidWebView Android🔰 4.4+Samsung InternetOpera Android11+

如果用户代理确定处于脱机状态(与网络断开连接),则返回 false。如果用户代理可能在线,则返回 true。

当此属性的值发生变化时,会触发 onlineoffline 事件。

onLine 属性必须返回 false,如果用户代理在用户点击链接或脚本请求远程页面(或知道此类尝试将失败)时不会联系网络,否则必须返回 true。

navigator.onLine 属性(属于 WindowWorkerGlobalScope global)返回的值从 true 变为 false 时,用户代理必须在给定 global网络任务源排队一个全局任务,以在 global触发一个名为 offline 的事件。

另一方面,当 navigator.onLine 属性(属于 WindowWorkerGlobalScope global)返回的值从 false 变为 true 时,用户代理必须在给定 global网络任务源排队一个全局任务,以在 WindowWorkerGlobalScope 对象上 触发一个名为 online 的事件。

此属性本质上不可靠。计算机可以连接到网络,但没有互联网访问权限。

在此示例中,当浏览器上线和下线时,指示器会更新。

<!DOCTYPE HTML>
<html lang="en">
 <head>
  <title>Online status</title>
  <script>
   function updateIndicator() {
     document.getElementById('indicator').textContent = navigator.onLine ? 'online' : 'offline';
   }
  </script>
 </head>
 <body onload="updateIndicator()" ononline="updateIndicator()" onoffline="updateIndicator()">
  <p>The network is: <span id="indicator">(state unknown)</span>
 </body>
</html>
8.9.1.4 自定义方案处理程序:registerProtocolHandler() 方法

Navigator/registerProtocolHandler

Firefox2+Safari不支持Chrome13+
Opera11.6+Edge79+
Edge (旧版)不支持Internet Explorer不支持
Firefox AndroidSafari iOSChrome Android不支持WebView AndroidSamsung InternetOpera Android
interface mixin NavigatorContentUtils {
  [SecureContext] undefined registerProtocolHandler(DOMString scheme, USVString url);
  [SecureContext] undefined unregisterProtocolHandler(DOMString scheme, USVString url);
};
window.navigator.registerProtocolHandler(scheme, url)

schemeurl 处注册一个处理程序。例如,在线电话消息服务可以将自身注册为 sms: 方案的处理程序,以便如果用户点击此类链接,则可以让他们有机会使用该网站。 [SMS]

url 中的字符串“%s”用作占位符,用于放置要处理的内容的 URL。

如果用户代理阻止注册,则会抛出一个 "SecurityError" DOMException(例如,尝试注册为“http”的处理程序时可能会发生这种情况)。

如果 url 中缺少字符串“%s”,则会抛出一个 "SyntaxError" DOMException

window.navigator.unregisterProtocolHandler(scheme, url)

Navigator/unregisterProtocolHandler

仅在一个引擎中支持。

Firefox不支持Safari不支持Chrome38+
Opera25+Edge79+
Edge (旧版)Internet Explorer不支持
Firefox AndroidSafari iOSChrome Android不支持WebView AndroidSamsung InternetOpera Android

取消注册由参数给定的处理程序。

如果用户代理阻止取消注册,则会抛出一个 "SecurityError" DOMException(例如,使用无效方案时可能会发生这种情况)。

如果 url 中缺少字符串“%s”,则会抛出一个 "SyntaxError" DOMException

registerProtocolHandler(scheme, url) 方法的步骤如下

  1. 令 (normalizedSchemenormalizedURLString) 为使用 schemeurlthis相关设置对象 运行 规范化协议处理程序参数 的结果。

  2. 并行:为 normalizedSchemenormalizedURLString 注册协议处理程序。用户代理可以在描述的约束范围内随意执行任何操作。例如,用户代理可以提示用户并提供机会将站点添加到处理程序的简短列表中,或将其设为默认处理程序,或取消请求。用户代理还可以静默收集信息,仅在与用户相关时提供。

    用户代理应跟踪哪些站点已注册处理程序(即使用户已拒绝此类注册),以便不会反复提示用户使用相同的请求。

    如果registerProtocolHandler() 自动化模式当前 相关全局对象关联的 Document 不是 "none",则用户代理应首先验证它是否处于自动化上下文中(参见WebDriver 的安全注意事项)。然后,用户代理应绕过以上信息通信和用户同意收集,并根据registerProtocolHandler() 自动化模式 的值执行以下操作。

    "autoAccept"

    假装用户已查看注册详细信息并接受了请求。

    "autoReject"

    假装用户已查看注册详细信息并拒绝了请求。

    用户代理使用此处理程序 处理URL inputURL

    1. 断言inputURL方案normalizedScheme

    2. 根据inputURL 和空字符串设置用户名

    3. 根据inputURL 和空字符串设置密码

    4. inputURLStringinputURL序列化结果。

    5. encodedURL 为使用组件百分比编码集inputURLString 进行UTF-8 百分比编码的结果。

    6. handlerURLStringnormalizedURLString

    7. handlerURLString 中第一个 "%s" 实例替换为 encodedURL

    8. resultURL解析 handlerURLString 的结果。

    9. 导航 一个合适的可导航对象resultURL

    如果用户访问过 https://example.com/ 网站并进行了以下调用

    navigator.registerProtocolHandler('web+soup', 'soup?url=%s')

    …然后,在很久以后,当访问 https://www.example.net/ 时,点击了一个类似于以下内容的链接

    <a href="web+soup:chicken-kïwi">Download our Chicken Kïwi soup!</a>

    …那么 UA 可能会导航到以下 URL

    https://example.com/soup?url=web+soup:chicken-k%C3%AFwi

    然后,此站点可以对 soup 执行任何操作(合成它并将其发送给用户,或执行任何其他操作)。

    这并没有定义何时使用处理程序。在某种程度上,跨文档导航的处理模型 定义了一些相关的情况,但通常用户代理可以在任何它们原本会考虑将方案传递给原生插件或辅助应用程序的地方使用此信息。

unregisterProtocolHandler(scheme, url) 方法的步骤如下

  1. 令 (normalizedScheme, normalizedURLString) 为使用 schemeurl当前 相关设置对象 运行规范化协议处理程序参数 的结果。

  2. 并行:取消注册由 normalizedSchemenormalizedURLString 描述的处理程序。


规范化协议处理程序参数,给定一个字符串 scheme、一个字符串 url 和一个环境设置对象 environment,执行以下步骤

  1. scheme 设置为 scheme,并转换为 ASCII 小写

  2. 如果 scheme 既不是安全列表中的方案,也不是以 "web+" 后跟一个或多个ASCII 小写字母 开头的字符串,则抛出一个"SecurityError" DOMException

    这意味着在 scheme 中包含冒号(如 "mailto:")将抛出错误。

    以下方案是安全列表中的方案

    此列表可能会更改。如果有需要添加的方案,请发送反馈。

  3. 如果 url 不包含 "%s",则抛出一个"SyntaxError" DOMException

  4. urlRecord 为给定 url 并相对于 environment 运行URL 编码解析 的结果。

  5. 如果 urlRecord 为失败,则抛出一个"SyntaxError" DOMException

    如果 %s 占位符位于 URL 的主机或端口中,则强制执行此情况。

  6. 如果 urlRecord方案 不是HTTP(S) 方案,或者 urlRecord来源environment来源同源,则抛出一个"SecurityError" DOMException

  7. 断言:给定 urlRecord 运行URL 是否可能值得信赖? 的结果为 "Potentially Trustworthy"。

    由于规范化协议处理程序参数安全上下文中运行,因此这由同源条件暗示。

  8. 返回 (scheme, urlRecord)。

    根据定义,urlRecord序列化结果不是有效的 URL 字符串,因为它包含字符串 "%s",该字符串不是 URL 中的有效组件。

8.9.1.4.1 安全性和隐私

自定义方案处理程序可能会带来一些问题,特别是隐私问题。

劫持所有 Web 使用。 用户代理不应允许其正常运行的关键方案(例如HTTP(S) 方案)通过第三方站点重定向。这将允许轻松跟踪用户的活动,并允许收集用户信息,即使在安全连接中也是如此。

劫持默认值。 强烈建议用户代理不要自动更改任何默认值,因为这可能会导致用户将数据发送到用户未预期的远程主机。新注册的处理程序绝不应自动导致使用这些站点。

注册垃圾邮件。 用户代理应考虑站点可能会尝试注册大量处理程序的可能性,这些处理程序可能来自多个域(例如,通过一系列每个域都注册一个 web+spam: 处理程序的页面进行重定向——类似的做法多年来一直被色情网站滥用其他 Web 浏览器功能)。用户代理应优雅地处理此类恶意尝试,保护用户。

恶意处理程序元数据。 用户代理应防范针对其界面中嵌入的字符串的典型攻击,例如确保此类字符串中的标记或转义字符不会执行,正确处理空字节,过长的字符串不会导致崩溃或缓冲区溢出,等等。

泄露私人数据。 网页作者可能会使用被视为私人的 URL 数据来引用自定义方案处理程序。他们可能会这样做的预期是,用户选择的处理程序指向组织内部的页面,从而确保敏感数据不会暴露给第三方。但是,用户可能已注册了一个指向外部站点的处理程序,从而导致数据泄露给该第三方。实现者可能希望考虑允许管理员在某些子域、内容类型或方案上禁用自定义处理程序。

界面干扰。 用户代理应准备好处理方法中故意设置的长参数。例如,如果公开的用户界面由一个“接受”按钮和一个“拒绝”按钮组成,“接受”绑定包含处理程序的名称,那么重要的是,长名称不会导致“拒绝”按钮被推离屏幕。

8.9.1.4.2 用户代理自动化

每个Document 都有一个registerProtocolHandler() 自动化模式。它默认为 "none",但也可以是 "autoAccept" 或 "autoReject"。

为了用户代理自动化和网站测试的目的,本标准定义了设置 RPH 注册模式 WebDriver 扩展命令。它指示用户代理将Document 置于一种模式下,在这种模式下,它将自动模拟用户接受或拒绝注册确认提示对话框。

HTTP 方法URI 模板
`POST`/session/{session id}/custom-handlers/set-mode

远程端步骤如下

  1. 如果 parameters 不是一个 JSON 对象,则返回一个带有 WebDriver 错误WebDriver 错误代码 无效参数 的错误。

  2. mode 为从 parameters获取名为 "mode" 的属性的结果。

  3. 如果 mode 不是 "autoAccept"、"autoReject" 或 "none",则返回一个带有 WebDriver 错误WebDriver 错误代码 无效参数 的错误。

  4. document当前浏览上下文活动文档

  5. documentregisterProtocolHandler() 自动化模式 设置为 mode

  6. 返回带有数据 null 的 成功

8.9.1.5 Cookie
interface mixin NavigatorCookies {
  readonly attribute boolean cookieEnabled;
};
window.navigator.cookieEnabled

Navigator/cookieEnabled

所有当前引擎均支持。

Firefox1+Safari1+Chrome1+
Opera12.1+Edge79+
Edge (旧版)12+Internet Explorer4+
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android12.1+

如果设置 Cookie 将被忽略,则返回 false,否则返回 true。

如果用户代理尝试根据 HTTP 状态管理机制 处理 Cookie,则 cookieEnabled 属性必须返回 true;如果用户代理忽略 Cookie 更改请求,则返回 false。 [COOKIES]

8.9.1.6 PDF 查看支持
window.navigator.pdfViewerEnabled

如果用户代理支持在 导航 到 PDF 文件时内联查看 PDF 文件,则返回 true,否则返回 false。在后一种情况下,PDF 文件将由 外部软件 处理。

interface mixin NavigatorPlugins {
  [SameObject] readonly attribute PluginArray plugins;
  [SameObject] readonly attribute MimeTypeArray mimeTypes;
  boolean javaEnabled();
  readonly attribute boolean pdfViewerEnabled;
};

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface PluginArray {
  undefined refresh();
  readonly attribute unsigned long length;
  getter Plugin? item(unsigned long index);
  getter Plugin? namedItem(DOMString name);
};

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface MimeTypeArray {
  readonly attribute unsigned long length;
  getter MimeType? item(unsigned long index);
  getter MimeType? namedItem(DOMString name);
};

[Exposed=Window,
 LegacyUnenumerableNamedProperties]
interface Plugin {
  readonly attribute DOMString name;
  readonly attribute DOMString description;
  readonly attribute DOMString filename;
  readonly attribute unsigned long length;
  getter MimeType? item(unsigned long index);
  getter MimeType? namedItem(DOMString name);
};

[Exposed=Window]
interface MimeType {
  readonly attribute DOMString type;
  readonly attribute DOMString description;
  readonly attribute DOMString suffixes;
  readonly attribute Plugin enabledPlugin;
};

尽管如今可以通过 navigator.pdfViewerEnabled 检测 PDF 查看器支持,但出于历史原因,存在许多复杂且相互交织的接口提供了相同的功能,而遗留代码依赖于这些接口。本节同时指定了简单的现代变体和复杂的传统变体。

每个用户代理都有一个 PDF 查看器支持 布尔值,其值是 实现定义的(并且可能根据用户偏好而有所不同)。

此值还会影响 导航 处理模型。


每个 Window 对象都有一个 PDF 查看器插件对象 列表。如果用户代理的 PDF 查看器支持 为 false,则它是空列表。否则,它是一个包含五个 Plugin 对象的列表,其 名称 分别为

  1. "PDF Viewer"
  2. "Chrome PDF Viewer"
  3. "Chromium PDF Viewer"
  4. "Microsoft Edge PDF Viewer"
  5. "WebKit built-in PDF"

上述列表的值构成 PDF 查看器插件名称 列表。

这些名称是根据网站历史上搜索内容的证据选择的,因此,为了保持与现有内容的兼容性,用户代理需要公开这些名称。它们按字母顺序排列。"PDF Viewer" 名称插入第 0 个位置,以便 enabledPlugin 获取器可以指向一个通用插件名称。

每个 Window 对象都有一个 PDF 查看器 MIME 类型对象 列表。如果用户代理的 PDF 查看器支持 为 false,则它是空列表。否则,它是一个包含两个 MimeType 对象的列表,其 类型 分别为

  1. "application/pdf"
  2. "text/pdf"

上述列表的值构成 PDF 查看器 MIME 类型 列表。


每个 NavigatorPlugins 对象都有一个 插件数组,它是一个新的 PluginArray,以及一个 MIME 类型数组,它是一个新的 MimeTypeArray

NavigatorPlugins 混合的 plugins 获取器步骤是返回 插件数组

NavigatorPlugins 混合的 mimeTypes 获取器步骤是返回 MIME 类型数组

NavigatorPlugins 混合的 javaEnabled() 方法步骤是返回 false。

Navigator/pdfViewerEnabled

所有当前引擎均支持。

Firefox99+Safari16.4+Chrome94+
Opera?Edge94+
Edge (旧版)Internet Explorer不支持
Firefox Android?Safari iOS?Chrome Android?WebView Android?Samsung Internet?Opera Android?

NavigatorPlugins 混合的 pdfViewerEnabled 获取器步骤是返回用户代理的 PDF 查看器支持


PluginArray 接口 支持命名属性。如果用户代理的 PDF 查看器支持 为 true,则它们是 PDF 查看器插件名称。否则,它们是空列表。

PluginArray 接口的 namedItem(name) 方法步骤为

  1. 对于 相关全局对象PDF 查看器插件对象 的每个 Plugin plugin:如果 plugin名称name,则返回 plugin

  2. 返回 null。

PluginArray 接口 支持索引属性支持的属性索引相关全局对象PDF 查看器插件对象索引

PluginArray 接口的 item(index) 方法步骤为

  1. plugins相关全局对象PDF 查看器插件对象

  2. 如果 index < plugins大小,则返回 plugins[index]。

  3. 返回 null。

PluginArray 接口的 length 获取器步骤是返回 相关全局对象PDF 查看器插件对象大小

PluginArray 接口的 refresh() 方法步骤是不执行任何操作。


MimeTypeArray 接口 支持命名属性。如果用户代理的 PDF 查看器支持 为 true,则它们是 PDF 查看器 MIME 类型。否则,它们是空列表。

MimeTypeArray 接口的 namedItem(name) 方法步骤为

  1. 对于 相关全局对象PDF 查看器 MIME 类型对象 的每个 MimeType mimeType:如果 mimeType类型name,则返回 mimeType

  2. 返回 null。

MimeTypeArray 接口 支持索引属性支持的属性索引相关全局对象PDF 查看器 MIME 类型对象索引

MimeTypeArray 接口的 item(index) 方法的步骤如下:

  1. mimeTypesthis相关全局对象PDF 查看器 MIME 类型对象

  2. 如果 index < mimeTypes大小,则返回 mimeTypes[index]。

  3. 返回 null。

MimeTypeArray 接口的 length 获取器步骤是返回 this相关全局对象PDF 查看器 MIME 类型对象大小


每个 Plugin 对象都有一个 名称,该名称在创建对象时设置。

Plugin 接口的 name 获取器步骤是返回 this名称

Plugin 接口的 description 获取器步骤是返回 "Portable Document Format"。

Plugin 接口的 filename 获取器步骤是返回 "internal-pdf-viewer"。

Plugin 接口 支持命名属性。如果用户代理的 PDF 查看器已支持 为 true,则它们是 PDF 查看器 MIME 类型。否则,它们是空列表。

Plugin 接口的 namedItem(name) 方法的步骤如下:

  1. 对于每个 MimeType mimeTypethis相关全局对象PDF 查看器 MIME 类型对象:如果 mimeType类型name,则返回 mimeType

  2. 返回 null。

Plugin 接口 支持索引属性支持的属性索引索引this相关全局对象PDF 查看器 MIME 类型对象

Plugin 接口的 item(index) 方法的步骤如下:

  1. mimeTypesthis相关全局对象PDF 查看器 MIME 类型对象

  2. 如果 index < mimeType大小,则返回 mimeTypes[index]。

  3. 返回 null。

Plugin 接口的 length 获取器步骤是返回 this相关全局对象PDF 查看器 MIME 类型对象大小


每个 MimeType 对象都有一个 类型,该类型在创建对象时设置。

MimeType 接口的 type 获取器步骤是返回 this类型

MimeType 接口的 description 获取器步骤是返回 "Portable Document Format"。

MimeType 接口的 suffixes 获取器步骤是返回 "pdf"。

MimeType 接口的 enabledPlugin 获取器步骤是返回 this相关全局对象PDF 查看器插件对象[0](即通用的 "PDF Viewer")。