Merge pull request #8 from heyunjiang/master

final first
This commit is contained in:
scycbx 2016-03-16 16:02:22 +08:00
commit c3f343e6c4
9 changed files with 617 additions and 0 deletions

View file

@ -242,6 +242,7 @@ var webContents = win.webContents;
* `result` Object
* `requestId` Integer
* `finalUpdate` Boolean - 标识是否还有更多的值可以查看.
* `activeMatchOrdinal` Integer (可选) - 活动匹配位置
* `matches` Integer (可选) - 匹配数量.
* `selectionArea` Object (可选) - 协调首个匹配位置.

View file

@ -528,6 +528,7 @@ webview.addEventListener('console-message', function(e) {
* `result` Object
* `requestId` Integer
* `finalUpdate` Boolean - 指明下面是否还有更多的回应.
* `activeMatchOrdinal` Integer (可选) - 活动匹配位置
* `matches` Integer (optional) - 匹配数量.
* `selectionArea` Object (optional) - 整合第一个匹配域.

View file

@ -0,0 +1,123 @@
# Build Instructions (Linux)
遵循下面的引导,在 Linux 上构建 Electron .
## Prerequisites
* Python 2.7.x. 一些发行版如 CentOS 仍然使用 Python 2.6.x ,所以或许需要 check 你的 Python 版本,使用 `python -V`.
* Node.js v0.12.x. 有很多方法来安装 Node. 可以从 [Node.js](http://nodejs.org)下载原文件并且编译它 .也可以作为一个标准的用户在 home 目录下安装 node .或者尝试使用仓库 [NodeSource](https://nodesource.com/blog/nodejs-v012-iojs-and-the-nodesource-linux-repositories).
* Clang 3.4 或更新的版本.
* GTK+开发头文件和libnotify.
在 Ubuntu, 安装下面的库 :
```bash
$ sudo apt-get install build-essential clang libdbus-1-dev libgtk2.0-dev \
libnotify-dev libgnome-keyring-dev libgconf2-dev \
libasound2-dev libcap-dev libcups2-dev libxtst-dev \
libxss1 libnss3-dev gcc-multilib g++-multilib
```
在 Fedora, 安装下面的库 :
```bash
$ sudo yum install clang dbus-devel gtk2-devel libnotify-devel libgnome-keyring-devel \
xorg-x11-server-utils libcap-devel cups-devel libXtst-devel \
alsa-lib-devel libXrandr-devel GConf2-devel nss-devel
```
其它版本的也许提供了相似的包来安装,通过包管理器,例如 pacman.
或一个可以编译源文件的.
## 使用虚拟机
如果在虚拟机上构建 Electron你需要一个固定大小的设备至少需要 25 gigabytes .
## 获取代码
```bash
$ git clone https://github.com/atom/electron.git
```
## Bootstrapping
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.需要使用 Python 2.7.x 来让脚本成功执行.正确下载文件会花费较长的时间.
注意我们使用的是 `ninja` 来构建 Electron所以没有生成 `Makefile` 项目.
```bash
$ cd electron
$ ./script/bootstrap.py -v
```
### 交叉编译
如果想创建一个 `arm` target ,应当还要下载下面的依赖 :
```bash
$ sudo apt-get install libc6-dev-armhf-cross linux-libc-dev-armhf-cross \
g++-arm-linux-gnueabihf
```
为了编译 `arm``ia32` targets, 你应当为 `bootstrap.py` 脚本使用
`--target_arch` 参数:
```bash
$ ./script/bootstrap.py -v --target_arch=arm
```
## 构建
创建 `Release``Debug` target:
```bash
$ ./script/build.py
```
这个脚本也许会在目录 `out/R` 下创建一个巨大的可执行的 Electron . 文件大小或许会超过 1.3 gigabytes. 原因是 Release target 二进制文件包含了 调试符号 .运行 `create-dist.py` 脚本来减小文件的 size :
```bash
$ ./script/create-dist.py
```
这会在 `dist` 目录下创建一个有大量小文件的工作空间. 运行 create-dist.py 脚本之后, 或许你想删除仍然在 `out/R` 下的 1.3+ gigabyte 二进制文件.
可以只创建 `Debug` target:
```bash
$ ./script/build.py -c D
```
创建完毕, 可以在 `out/D`下面找到 `electron`.
## Cleaning
删除构建文件 :
```bash
$ ./script/clean.py
```
## 解决问题
确保你已经安装了所有的依赖 .
### Error While Loading Shared Libraries: libtinfo.so.5
预构建的 `clang` 会尝试链接到 `libtinfo.so.5`. 取决于 host 架构, 适当的使用 `libncurses`:
```bash
$ sudo ln -s /usr/lib/libncurses.so.5 /usr/lib/libtinfo.so.5
```
## Tests
测试你的修改是否符合项目代码风格,使用:
```bash
$ ./script/cpplint.py
```
测试有效性使用:
```bash
$ ./script/test.py
```

View file

@ -0,0 +1,62 @@
# Build Instructions (OS X)
遵循下面的引导,在 OS X 上构建 Electron .
## 前提
* OS X >= 10.8
* [Xcode](https://developer.apple.com/technologies/tools/) >= 5.1
* [node.js](http://nodejs.org) (外部)
如果你通过 Homebrew 使用 Python 下载,需要安装下面的 Python 模块:
* pyobjc
## 获取代码
```bash
$ git clone https://github.com/atom/electron.git
```
## Bootstrapping
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.注意我们使用的是 `ninja` 来构建 Electron所以没有生成 Xcode 项目.
```bash
$ cd electron
$ ./script/bootstrap.py -v
```
## 构建
创建 `Release``Debug` target:
```bash
$ ./script/build.py
```
可以只创建 `Debug` target:
```bash
$ ./script/build.py -c D
```
创建完毕, 可以在 `out/D` 下面找到 `Electron.app`.
## 32位支持
在 OS X 上,构建 Electron 只支持 64位的不支持 32位的 .
## 测试
测试你的修改是否符合项目代码风格,使用:
```bash
$ ./script/cpplint.py
```
测试有效性使用:
```bash
$ ./script/test.py
```

View file

@ -0,0 +1,136 @@
# Build Instructions (Windows)
遵循下面的引导,在 Windows 上构建 Electron .
## 前提
* Windows 7 / Server 2008 R2 or higher
* Visual Studio 2013 with Update 4 - [download VS 2013 Community Edition for
free](https://www.visualstudio.com/news/vs2013-community-vs).
* [Python 2.7](http://www.python.org/download/releases/2.7/)
* [Node.js](http://nodejs.org/download/)
* [Git](http://git-scm.com)
如果你现在还没有安装 Windows , [modern.ie](https://www.modern.ie/en-us/virtualization-tools#downloads) 有一个 timebombed 版本的 Windows ,你可以用它来构建 Electron.
构建 Electron 完全的依赖于命令行,并且不可通过 Visual Studio.
可以使用任何的编辑器来开发 Electron ,未来会支持 Visual Studio.
**注意:** 虽然 Visual Studio 不是用来构建的,但是它仍然
**必须的** ,因为我们需要它提供的构建工具栏.
**注意:** Visual Studio 2015 不可用. 请确定使用 MSVS
**2013**.
## 获取代码
```powershell
$ git clone https://github.com/atom/electron.git
```
## Bootstrapping
bootstrap 脚本也是必要下载的构建依赖,来创建项目文件.注意我们使用的是 `ninja` 来构建 Electron所以没有生成 Visual Studio 项目.
```powershell
$ cd electron
$ python script\bootstrap.py -v
```
## 构建
创建 `Release``Debug` target:
```powershell
$ python script\build.py
```
可以只创建 `Debug` target:
```powershell
$ python script\build.py -c D
```
创建完毕, 可以在 `out/D`(debug target) 或 `out\R` (release target) 下面找到 `electron.exe`.
## 64bit Build
为了构建64位的 target,在运行 bootstrap 脚本的时候需要使用 `--target_arch=x64` :
```powershell
$ python script\bootstrap.py -v --target_arch=x64
```
其他构建步骤完全相同.
## Tests
测试你的修改是否符合项目代码风格,使用:
```powershell
$ python script\cpplint.py
```
测试有效性使用:
```powershell
$ python script\test.py
```
在构建 debug 时为 Tests包含原生模块 (例如 `runas`) 将不会执行(详情 [#2558](https://github.com/atom/electron/issues/2558)), 但是它们在构建 release 会起效.
运行 release 构建使用 :
```powershell
$ python script\test.py -R
```
## 解决问题
### Command xxxx not found
如果你遇到了一个错误,类似 `Command xxxx not found`, 可以尝试使用 `VS2012 Command Prompt` 控制台来执行构建脚本 .
### Fatal internal compiler error: C1001
确保你已经安装了 Visual Studio 的最新安装包 .
### Assertion failed: ((handle))->activecnt >= 0
如果在 Cygwin 下构建的,你可能会看到 `bootstrap.py` 失败并且附带下面错误 :
```
Assertion failed: ((handle))->activecnt >= 0, file src\win\pipe.c, line 1430
Traceback (most recent call last):
File "script/bootstrap.py", line 87, in <module>
sys.exit(main())
File "script/bootstrap.py", line 22, in main
update_node_modules('.')
File "script/bootstrap.py", line 56, in update_node_modules
execute([NPM, 'install'])
File "/home/zcbenz/codes/raven/script/lib/util.py", line 118, in execute
raise e
subprocess.CalledProcessError: Command '['npm.cmd', 'install']' returned non-zero exit status 3
```
这是由同时使用 Cygwin Python 和 Win32 Node 造成的 bug.解决办法就是使用 Win32 Python 执行 bootstrap 脚本 (假定你已经在目录 `C:\Python27` 下安装了 Python):
```powershell
$ /cygdrive/c/Python27/python.exe script/bootstrap.py
```
### LNK1181: cannot open input file 'kernel32.lib'
重新安装 32位的 Node.js.
### Error: ENOENT, stat 'C:\Users\USERNAME\AppData\Roaming\npm'
简单创建目录 [应该可以解决问题](http://stackoverflow.com/a/25095327/102704):
```powershell
$ mkdir ~\AppData\Roaming\npm
```
### node-gyp is not recognized as an internal or external command
如果你使用 Git Bash 来构建,或许会遇到这个错误,可以使用 PowerShell 或 VS2012 Command Prompt 来代替 .

View file

@ -0,0 +1,42 @@
# Build System Overview
Electron 使用 `gyp` 来生成项目 ,使用 `ninja` 来构建项目. 项目配置可以在 `.gyp``.gypi` 文件中找到.
## Gyp 文件
下面的 `gyp` 文件包含了构建 Electron 的主要规则 :
* `atom.gyp` 定义了 Electron 它自己是怎样被构建的.
* `common.gypi` 调整 node 的构建配置,来让它结合 Chromium 一起构建.
* `vendor/brightray/brightray.gyp` 定义了 `brightray` 是如何被构建的,并且包含了默认配置来连接到 Chromium.
* `vendor/brightray/brightray.gypi` 包含了常用的创建配置.
## 创建组件
在 Chromium 还是一个相当大的项目的时候,最后链接阶段会花了好几分钟,这让开发变得很困难. 为了解决这个困难Chromium 引入了 "component build" ,这让每个创建的组建都是分隔开的共享库,让链接更快,但是这浪费了文件大小和性能.
在 Electron 中,我们采用了一个非常相似的方法 : 在创建 `Debug` , 二进制文件会被链接进入一个 Chromium 组件的共享版本库来达到快速链接; 在创建 `Release`, 二进制文件会被链接进入一个静态版本库, 所以我们可以有最小的二进制文件size和最佳的体验.
## Minimal Bootstrapping
在运行 bootstrap 脚本的时候,所有的 Chromium 预编译二进制文件会被下载.默认静态库和共享库会被下载,并且项目的最后大小会在 800MB 到 2GB 之间,这取决于平台类型.
默认,`libchromiumcontent` 是从 Amazon Web Services 上下载下来的.如果设置了 `LIBCHROMIUMCONTENT_MIRROR` 环境变量bootstrap脚本会从这里下载下来. [`libchromiumcontent-qiniu-mirror`](https://github.com/hokein/libchromiumcontent-qiniu-mirror) 是 `libchromiumcontent` 的映射.如果你不能连接 AWS你可以切换下载路径`export LIBCHROMIUMCONTENT_MIRROR=http://7xk3d2.dl1.z0.glb.clouddn.com/`
如果只是想快速搭建一个 Electron 的测试或开发环境,可以通过 `--dev` 参数只下载共享版本库:
```bash
$ ./script/bootstrap.py --dev
$ ./script/build.py -c D
```
## Two-Phase Project Generation
`Release``Debug` 构建的时候后Electron 链接了不同配置的库 .然而 `gyp`不支持为不同的配置文件进行不同的链接设置.
为了规避这个问题Electron 在运行 `gyp` 的时候,使用了一个 `gyp` 的变量 `libchromiumcontent_component`来控制应该使用哪个链接设置,并且只生成一个目标.
## Target Names
与大多数的项目不同,它们使用 `Release``Debug` 作为目标名字,而 Electron 使用使用的是 `R``D`.这是因为如果只定义了一个 `Release``Debug` 构建配置,`gyp` 会随机崩溃并且在同一时候Electron 只生成一个目标,如上所述.
这只对开发者可用,如果想重新构建 Electron ,将不会成功.

View file

@ -0,0 +1,38 @@
# Setting Up Symbol Server in Debugger
调试 symbols 让你有更好的调试 sessions. 它们有可执行的动态库的函数信息,并且提供信息来获得洁净的呼叫栈. 一个 Symbol 服务器允许调试器自动加载正确的 symbols, 二进制文件 和 资源文件,不用再去强制用户下载巨大的调试文件. 服务器函数类似
[Microsoft's symbol server](http://support.microsoft.com/kb/311503) ,所以这里的记录可用.
注意,因为公众版本的 Electron 构建是最优化的,调试不一定一直简单.调试器将不会给显示出所有变量内容,并且因为内联,尾调用,和其它编译器优化,执行路径会看起来很怪异 . 唯一的解决办法是搭建一个不优化的本地构建.
Electron 使用的官方 symbol 服务器地址为
`http://54.249.141.255:8086/atom-shell/symbols` .
你不能直接访问这个路径,必须将其添加到你的调试工具的 symbol 路径上.在下面的例子中,使用了一个本地缓存目录来避免重复从服务器获取 PDB. 在你的电脑上使用一个恰当的缓存目录来代替 `c:\code\symbols` .
## Using the Symbol Server in Windbg
Windbg symbol 路径被配制为一个限制带星号字符的字符串. 要只使用 Electron 的 symbol 服务器, 将下列记录添加到你的 symbol 路径 (__注意:__ 如果你愿意使用一个不同的地点来下载 symbols你可以在你的电脑中使用任何可写的目录来代替 `c:\code\symbols`):
```
SRV*c:\code\symbols\*http://54.249.141.255:8086/atom-shell/symbols
```
使用 Windbg 菜单或通过输入 `.sympath` 命令,在环境中设置一个 `_NT_SYMBOL_PATH` 字符串.如果你也想从微软的 symbol 服务器获得 symbols ,你应当首先将它们先列出来 :
```
SRV*c:\code\symbols\*http://msdl.microsoft.com/download/symbols;SRV*c:\code\symbols\*http://54.249.141.255:8086/atom-shell/symbols
```
## 在 Visual Studio 中使用 symbol 服务器
<img src='http://mdn.mozillademos.org/files/733/symbol-server-vc8express-menu.jpg'>
<img src='http://mdn.mozillademos.org/files/2497/2005_options.gif'>
## Troubleshooting: Symbols will not load
在 Windbg 中输入下列命令,打印出未什么 symbols 没有加载 :
```
> !sym noisy
> .reload /f chromiumcontent.dll
```

View file

@ -0,0 +1,147 @@
# Mac App Store 应用提交向导
自从 v0.34.0, Electron 就允许提交应用包到 Mac App Store
(MAS) . 这个向导提供的信息有 : 如何提交应用和 MAS 构建的限制.
__注意:__ 从 v0.36.0,当应用成为沙箱之后,会有一个 bug 阻止 GPU 进程开启 , 所以在这个 bug 修复之前,建议使用 v0.35.x .更多查看 [issue #3871][issue-3871] .
__注意:__ 提交应用到 Mac App Store 需要参加 [Apple Developer
Program][developer-program] , 这需要花钱.
## 如何提交
下面步骤介绍了一个简单的提交应用到商店方法.然而,这些步骤不能保证你的应用被 Apple 接受;你仍然需要阅读 Apple 的 [Submitting Your App][submitting-your-app] 关于如何满足 Mac App Store 要求的向导.
### 获得证书
为了提交应用到商店,首先需要从 Apple 获得一个证书.可以遵循 [existing guides][nwjs-guide].
### App 签名
获得证书之后,你可以使用 [Application Distribution](application-distribution.md) 打包你的应用, 然后前往提交你的应用.这个步骤基本上和其他程序一样,但是这 key 一个个的标识 Electron 的每个依赖.
首先你需要准备2个授权文件 .
`child.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
```
`parent.plist`:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
</dict>
</plist>
```
然后使用下面的脚本标识你的应用 :
```bash
#!/bin/bash
# Name of your app.
APP="YourApp"
# The path of you app to sign.
APP_PATH="/path/to/YouApp.app"
# The path to the location you want to put the signed package.
RESULT_PATH="~/Desktop/$APP.pkg"
# The name of certificates you requested.
APP_KEY="3rd Party Mac Developer Application: Company Name (APPIDENTITY)"
INSTALLER_KEY="3rd Party Mac Developer Installer: Company Name (APPIDENTITY)"
FRAMEWORKS_PATH="$APP_PATH/Contents/Frameworks"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Electron Framework.framework/Versions/A"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper EH.app/"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/$APP Helper NP.app/"
if [ -d "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A" ]; then
# Signing a non-MAS build.
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Mantle.framework/Versions/A"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/ReactiveCocoa.framework/Versions/A"
codesign --deep -fs "$APP_KEY" --entitlements child.plist "$FRAMEWORKS_PATH/Squirrel.framework/Versions/A"
fi
codesign -fs "$APP_KEY" --entitlements parent.plist "$APP_PATH"
productbuild --component "$APP_PATH" /Applications --sign "$INSTALLER_KEY" "$RESULT_PATH"
```
如果你是 OS X 下的应用沙箱使用新手,应当仔细阅读 Apple 的 [Enabling App Sandbox][enable-app-sandbox] 来有一点基础,然后向授权文件添加你的应用需要的许可 keys .
### 上传你的应用并检查提交
在签名应用之后,可以使用应用 Loader 来上传到 iTunes 链接处理 , 确保在上传之前你已经 [created a record][create-record]. 然后你能 [submit your app for review][submit-for-review].
## MAS构建限制
为了让你的应用沙箱满足所有条件,在 MAS 构建的时候,下面的模块被禁用了 :
* `crashReporter`
* `autoUpdater`
并且下面的行为也改变了:
* 一些机子的视频采集功能无效.
* 某些特征不可访问.
* Apps 不可识别 DNS 改变.
也由于应用沙箱的使用方法,应用可以访问的资源被严格限制了 ; 阅读更多信息 [App Sandboxing][app-sandboxing] .
## Electron 使用的加密算法
取决于你所在地方的国家和地区 , Mac App Store 或许需要记录你应用的加密算法 , 甚至要求你提交一个 U.S 加密注册(ERN) 许可的复印件.
Electron 使用下列加密算法:
* AES - [NIST SP 800-38A](http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf), [NIST SP 800-38D](http://csrc.nist.gov/publications/nistpubs/800-38D/SP-800-38D.pdf), [RFC 3394](http://www.ietf.org/rfc/rfc3394.txt)
* HMAC - [FIPS 198-1](http://csrc.nist.gov/publications/fips/fips198-1/FIPS-198-1_final.pdf)
* ECDSA - ANS X9.622005
* ECDH - ANS X9.632001
* HKDF - [NIST SP 800-56C](http://csrc.nist.gov/publications/nistpubs/800-56C/SP-800-56C.pdf)
* PBKDF2 - [RFC 2898](https://tools.ietf.org/html/rfc2898)
* RSA - [RFC 3447](http://www.ietf.org/rfc/rfc3447)
* SHA - [FIPS 180-4](http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf)
* Blowfish - https://www.schneier.com/cryptography/blowfish/
* CAST - [RFC 2144](https://tools.ietf.org/html/rfc2144), [RFC 2612](https://tools.ietf.org/html/rfc2612)
* DES - [FIPS 46-3](http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf)
* DH - [RFC 2631](https://tools.ietf.org/html/rfc2631)
* DSA - [ANSI X9.30](http://webstore.ansi.org/RecordDetail.aspx?sku=ANSI+X9.30-1%3A1997)
* EC - [SEC 1](http://www.secg.org/sec1-v2.pdf)
* IDEA - "On the Design and Security of Block Ciphers" book by X. Lai
* MD2 - [RFC 1319](http://tools.ietf.org/html/rfc1319)
* MD4 - [RFC 6150](https://tools.ietf.org/html/rfc6150)
* MD5 - [RFC 1321](https://tools.ietf.org/html/rfc1321)
* MDC2 - [ISO/IEC 10118-2](https://www.openssl.org/docs/manmaster/crypto/mdc2.html)
* RC2 - [RFC 2268](https://tools.ietf.org/html/rfc2268)
* RC4 - [RFC 4345](https://tools.ietf.org/html/rfc4345)
* RC5 - http://people.csail.mit.edu/rivest/Rivest-rc5rev.pdf
* RIPEMD - [ISO/IEC 10118-3](http://webstore.ansi.org/RecordDetail.aspx?sku=ISO%2FIEC%2010118-3:2004)
如何获取 ERN 许可, 可看这篇文章: [How to legally
submit an app to Apples App Store when it uses encryption (or how to obtain an
ERN)][ern-tutorial].
[developer-program]: https://developer.apple.com/support/compare-memberships/
[submitting-your-app]: https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/SubmittingYourApp/SubmittingYourApp.html
[nwjs-guide]: https://github.com/nwjs/nw.js/wiki/Mac-App-Store-%28MAS%29-Submission-Guideline#first-steps
[enable-app-sandbox]: https://developer.apple.com/library/ios/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingAppSandbox.html
[create-record]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/CreatingiTunesConnectRecord.html
[submit-for-review]: https://developer.apple.com/library/ios/documentation/LanguagesUtilities/Conceptual/iTunesConnect_Guide/Chapters/SubmittingTheApp.html
[app-sandboxing]: https://developer.apple.com/app-sandboxing/
[issue-3871]: https://github.com/atom/electron/issues/3871
[ern-tutorial]: https://carouselapps.com/2015/12/15/legally-submit-app-apples-app-store-uses-encryption-obtain-ern/

View file

@ -0,0 +1,67 @@
# 使用 Widevine CDM 插件
在 Electron ,你可以使用 Widevine CDM 插件装载 Chrome 浏览器 .
## 获取插件
Electron 没有为 Widevine CDM 插件 配制许可 reasons, 为了获得它,首先需要安装官方的 chrome 浏览器,这匹配了体系架构和 Electron 构建使用的 chrome 版本 .
__注意:__ Chrome 浏览器的主要版本必须和 Electron 使用的版本一样,否则插件不会有效,虽然 `navigator.plugins` 会显示你已经安装了它 .
### Windows & OS X
在 Chrome 浏览器中打开 `chrome://components/` ,找到 `WidevineCdm` 并且确定它更新到最新版本,然后你可以从 `APP_DATA/Google/Chrome/WidevineCDM/VERSION/_platform_specific/PLATFORM_ARCH/` 路径找到所有的插件二进制文件 .
`APP_DATA` 是系统存放数据的地方,在 Windows 上它是
`%LOCALAPPDATA%`, 在 OS X 上它是 `~/Library/Application Support`. `VERSION`
Widevine CDM 插件的版本字符串, 类似 `1.4.8.866`. `PLATFORM``mac`
`win`. `ARCH``x86``x64`.
在 Windows必要的二进制文件是 `widevinecdm.dll` and
`widevinecdmadapter.dll`, 在 OS X ,它们是 `libwidevinecdm.dylib`
`widevinecdmadapter.plugin`. 你可以将它们复制到任何你喜欢的地方,但是它们必须要放在一起.
### Linux
在 Linux Chrome 浏览器将插件的二进制文件装载在一起 , 你可以在 `/opt/google/chrome` 下找到,文件名是 `libwidevinecdm.so`
`libwidevinecdmadapter.so`.
## 使用插件
在获得了插件文件后,你可以使用 `--widevine-cdm-path` 命令行开关来将 `widevinecdmadapter` 的路径传递给 Electron , 插件版本使用 `--widevine-cdm-version` 开关.
__注意:__ 虽然只有 `widevinecdmadapter` 的二进制文件传递给了 Electron, `widevinecdm` 二进制文件应当放在它的旁边.
必须在 `app` 模块的 `ready` 事件触发之前使用命令行开关,并且 page 使用的插件必须激活.
示例代码 :
```javascript
// You have to pass the filename of `widevinecdmadapter` here, it is
// * `widevinecdmadapter.plugin` on OS X,
// * `libwidevinecdmadapter.so` on Linux,
// * `widevinecdmadapter.dll` on Windows.
app.commandLine.appendSwitch('widevine-cdm-path', '/path/to/widevinecdmadapter.plugin');
// The version of plugin can be got from `chrome://plugins` page in Chrome.
app.commandLine.appendSwitch('widevine-cdm-version', '1.4.8.866');
var mainWindow = null;
app.on('ready', function() {
mainWindow = new BrowserWindow({
webPreferences: {
// The `plugins` have to be enabled.
plugins: true
}
})
});
```
## 验证插件
为了验证插件是否工作,你可以使用下面的方法 :
* 打开开发者工具查看是否 `navigator.plugins` 包含了 Widevine
CDM 插件.
* 打开 `https://shaka-player-demo.appspot.com/` 加载一个使用
`Widevine` 的 manifest.
* 打开 http://www.dash-player.com/demo/drm-test-area/, 检查是否界面输出 `bitdash uses Widevine in your browser`, 然后播放 video.