Translate app.md in commit 45739ce434

This commit is contained in:
Magica 2016-02-21 13:49:51 +08:00
parent 1db72f8010
commit f64dc5f57d

View file

@ -11,11 +11,11 @@ app.on('window-all-closed', function() {
});
```
## 事件
## 事件列表
`app` 对象会触发以下的事件:
### 事件: 'will-finish-launching'
### 事件:'will-finish-launching'
当应用程序完成基础的启动的时候被触发。在 Windows 和 Linux 中,
`will-finish-launching` 事件与 `ready` 事件是相同的; 在 OS X 中,
@ -24,11 +24,11 @@ app.on('window-all-closed', function() {
在大多数的情况下,你应该只在 `ready` 事件处理器中完成所有的业务。
### 事件: 'ready'
### 事件:'ready'
当 Electron 完成初始化时被触发。
### 事件: 'window-all-closed'
### 事件:'window-all-closed'
当所有的窗口都被关闭时触发。
@ -36,20 +36,20 @@ app.on('window-all-closed', function() {
或者开发者调用了 `app.quit()` Electron 将会先尝试关闭所有的窗口再触发 `will-quit` 事件,
在这种情况下 `window-all-closed` 不会被触发。
### 事件: 'before-quit'
### 事件:'before-quit'
返回:
* `event` 事件
* `event` Event
在应用程序开始关闭它的窗口的时候被触发。
调用 `event.preventDefault()` 将会阻止终止应用程序的默认行为。
### 事件: 'will-quit'
### 事件:'will-quit'
返回:
* `event` 事件
* `event` Event
当所有的窗口已经被关闭,应用即将退出时被触发。
调用 `event.preventDefault()` 将会阻止终止应用程序的默认行为。
@ -57,20 +57,20 @@ app.on('window-all-closed', function() {
你可以在 `window-all-closed` 事件的描述中看到 `will-quit` 事件
`window-all-closed` 事件的区别。
### 事件: 'quit'
### 事件:'quit'
返回:
* `event` 事件
* `exitCode` 整数
* `event` Event
* `exitCode` Integer
当应用程序正在退出时触发。
### 事件: 'open-file' _OS X_
### 事件:'open-file' _OS X_
返回:
* `event` 事件
* `path` 字符串
* `event` Event
* `path` String
当用户想要在应用中打开一个文件时触发。`open-file` 事件常常在应用已经打开并且系统想要再次使用应用打开文件时被触发。
`open-file` 也会在一个文件被拖入 dock 且应用还没有运行的时候被触发。
@ -78,73 +78,74 @@ app.on('window-all-closed', function() {
如果你想处理这个事件,你应该调用 `event.preventDefault()`
在 Windows系统中, 你需要通过解析 process.argv 来获取文件路径。
### 事件: 'open-url' _OS X_
### 事件:'open-url' _OS X_
返回:
* `event` 事件
* `url` 字符串
* `event` Event
* `url` String
当用户想要在应用中打开一个url的时候被触发。URL格式必须要提前标识才能被你的应用打开。
如果你想处理这个事件,你应该调用 `event.preventDefault()`
### 事件: 'activate' _OS X_
### 事件:'activate' _OS X_
返回:
* `event` 事件
* `hasVisibleWindows` 布尔值
* `event` Event
* `hasVisibleWindows` Boolean
当应用被激活时触发,常用于点击应用的 dock 图标的时候。
### 事件: 'browser-window-blur'
### 事件:'browser-window-blur'
返回:
* `event` 事件
* `window` 浏览器窗口
* `event` Event
* `window` BrowserWindow
当一个 [浏览器窗口](browser-window.md) 失去焦点的时候触发。
当一个 [BrowserWindow](browser-window.md) 失去焦点的时候触发。
### 事件: 'browser-window-focus'
### 事件:'browser-window-focus'
返回:
* `event` 事件
* `window` 浏览器窗口
* `event` Event
* `window` BrowserWindow
当一个 [浏览器窗口](browser-window.md) 获得焦点的时候触发。
当一个 [BrowserWindow](browser-window.md) 获得焦点的时候触发。
### 事件: 'browser-window-created'
### 事件:'browser-window-created'
返回:
* `event` 事件
* `window` 浏览器窗口
* `event` Event
* `window` BrowserWindow
当一个 [浏览器窗口](browser-window.md) 被创建的时候触发。
当一个 [BrowserWindow](browser-window.md) 被创建的时候触发。
### 事件: 'certificate-error'
### 事件:'certificate-error'
返回:
* `event` 事件
* `webContents` [web组件](web-contents.md)
* `url` 字符串
* `certificateList` 对象
* `data` PEM 编码数据
* `issuerName` 发行者的公有名称
* `callback` 函数
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` String - URL 地址
* `error` String - 错误码
* `certificate` Object
* `data` Buffer - PEM 编码数据
* `issuerName` String - 发行者的公有名称
* `callback` Function
Emitted when failed to verify the `certificate` for `url`, to trust the
certificate you should prevent the default behavior with
`event.preventDefault()` and call `callback(true)`.
当对 `url` 验证 `certificate` 证书失败的时候触发,如果需要信任这个证书,你需要阻止默认行为 `event.preventDefault()` 并且
调用 `callback(true)`
```javascript
session.on('certificate-error', function(event, webContents, url, error, certificate, callback) {
if (url == "https://github.com") {
// Verification logic.
// 验证逻辑。
event.preventDefault();
callback(true);
} else {
@ -153,37 +154,37 @@ session.on('certificate-error', function(event, webContents, url, error, certifi
});
```
### 事件: 'select-client-certificate'
### 事件:'select-client-certificate'
返回:
* `event` 事件
* `webContents` [web组件](web-contents.md)
* `url` 字符串
* `certificateList` 对象
* `data` PEM 编码数据
* `issuerName` 发行者的公有名称
* `callback` 函数
* `event` Event
* `webContents` [WebContents](web-contents.md)
* `url` String - URL 地址
* `certificateList` [Object]
* `data` Buffer - PEM 编码数据
* `issuerName` String - 发行者的公有名称
* `callback` Function
当一个客户端认证被请求的时候被触发。
The `url` corresponds to the navigation entry requesting the client certificate
and `callback` needs to be called with an entry filtered from the list.
Using `event.preventDefault()` prevents the application from using the first
certificate from the store.
`url` 指的是请求客户端认证的网页地址,调用 `callback` 时需要传入一个证书列表中的证书。
需要通过调用 `event.preventDefault()` 来防止应用自动使用第一个证书进行验证。如下所示:
```javascript
app.on('select-certificate', function(event, host, url, list, callback) {
event.preventDefault();
callback(list[0]);
})
```
### Event: 'login'
### 事件: 'login'
Returns:
返回:
* `event` Event
* `webContents` [Web组件](web-contents.md)
* `webContents` [WebContents](web-contents.md)
* `request` Object
* `method` String
* `url` URL
@ -196,11 +197,10 @@ Returns:
* `realm` String
* `callback` Function
`webContents` 要做验证时被触发。
`webContents` 要做进行一次 HTTP 登陆验证时被触发。
The default behavior is to cancel all authentications, to override this you
should prevent the default behavior with `event.preventDefault()` and call
`callback(username, password)` with the credentials.
默认情况下Electron 会取消所有的验证行为,如果需要重写这个行为,你需要用 `event.preventDefault()` 来阻止默认行为,并且
`callback(username, password)` 来进行验证。
```javascript
app.on('login', function(event, webContents, request, authInfo, callback) {
@ -208,22 +208,22 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
callback('username', 'secret');
})
```
### 事件: 'gpu-process-crashed'
### 事件:'gpu-process-crashed'
当GPU进程崩溃时触发。
GPU 进程崩溃时触发。
## 方法
## 方法列表
`app` 对象拥有以下的方法:
**提示:** 有的方法只能用于特定的操作系统。
**请注意** 有的方法只能用于特定的操作系统。
### `app.quit()`
试图关掉所有的窗口。`before-quit` 事件将会最先触发。如果所有的窗口都被成功关闭了,
试图关掉所有的窗口。`before-quit` 事件将会最先触发。如果所有的窗口都被成功关闭了,
`will-quit` 事件将会被触发,默认下应用将会被关闭。
这个方法保证了所有的 `beforeunload``unload` 事件处理器被正确执行。会存在一个窗口被 `beforeunload` 事件处理器返回 `false` 取消退出的可能性
这个方法保证了所有的 `beforeunload``unload` 事件处理器被正确执行。假如一个窗口的 `beforeunload` 事件处理器返回 `false`,那么整个应用可能会取消退出
### `app.hide()` _OS X_
@ -241,30 +241,29 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
所有的窗口会被立刻关闭,不会询问用户。`before-quit` 和 `will-quit` 这2个事件不会被触发
### `app.getAppPath()`
返回当前应用所在的文件路径。
### `app.getPath(name)`
* `name` 字符串
* `name` String
返回一个与 `name` 参数相关的特殊文件夹或文件路径。当失败时抛出一个 `Error`
你可以通过名称请求以下的路径:
* `home` 用户的 home 文件夹
* `appData` 所有用户的应用数据文件夹,默认对应:
* `home` 用户的 home 文件夹(主目录)
* `appData` 当前用户的应用数据文件夹,默认对应:
* `%APPDATA%` Windows 中
* `$XDG_CONFIG_HOME` or `~/.config` Linux 中
* `~/Library/Application Support` OS X 中
* `userData` 储存你应用程序设置文件的文件夹,默认是 `appData` 文件夹附加应用的名称
* `temp` 临时文件夹
* `userData` 储存你应用程序设置文件的文件夹,默认是 `appData` 文件夹附加应用的名称
* `temp` 临时文件夹
* `exe` 当前的可执行文件
* `module` `libchromiumcontent`.
* `desktop` 当前用户的桌面文件夹
* `documents` "我的文件夹"的路径.
* `module` `libchromiumcontent`
* `desktop` 当前用户的桌面文件夹
* `documents` 用户文档目录的路径
* `downloads` 用户下载目录的路径.
* `music` 用户音乐目录的路径.
* `pictures` 用户图片目录的路径.
@ -272,14 +271,14 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
### `app.setPath(name, path)`
* `name` 字符串
* `path` 字符串
* `name` String
* `path` String
重写 `path` 参数到一个特别的文件夹或者是一个和 `name` 参数有关系的文件
重写某个 `name` 的路径为 `path``path` 可以是一个文件夹或者一个文件,这个和 `name` 的类型有关
如果这个路径指向的文件夹不存在,这个文件夹将会被这个方法创建。
如果错误则抛出 `Error`
如果错误则抛出 `Error`
你只可以指向 `app.getPath` 中定义过 `name` 的路径
`name` 参数只能使用 `app.getPath` 中定义过 `name`
默认情况下,网页的 cookie 和缓存都会储存在 `userData` 文件夹。
如果你想要改变这个位置,你需要在 `app` 模块中的 `ready` 事件被触发之前重写 `userData` 的路径。
@ -293,22 +292,20 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
返回当前应用程序的 `package.json` 文件中的名称。
通常 `name` 字段是一个短的小写字符串,其命名规则按照 npm 中的模块命名规则。你应该单独列举一个
`productName` 字段,用于表示你的应用程序的完整名称,这个名称将会被 Electron 优先采用
由于 npm 的命名规则,通常 `name` 字段是一个短的小写字符串。但是应用名的完整名称通常是首字母大写的,你应该单独使用一个
`productName` 字段,用于表示你的应用程序的完整名称。Electron 会优先使用这个字段作为应用名
### `app.getLocale()`
返回当前应用程序的语言种类。
返回当前应用程序的语言。
### `app.addRecentDocument(path)` _OS X_ _Windows_
* `path` 字符串
* `path` String
最近访问的文档列表中添加 `path`
最近访问的文档列表中添加 `path`
这个列表由操作系统进行管理。在 Windows 中您可以通过任务条进行访问,在 OS X 中你可以通过dock 菜单进行访问。
这个列表由操作系统进行管理。在 Windows 中您可以通过任务条进行访问,在 OS X 中你可以通过 dock 菜单进行访问。
### `app.clearRecentDocuments()` _OS X_ _Windows_
@ -316,66 +313,55 @@ app.on('login', function(event, webContents, request, authInfo, callback) {
### `app.setUserTasks(tasks)` _Windows_
* `tasks``Task` 对象构成的数组
* `tasks` [Task] - 一个由 Task 对象构成的数组
`tasks` 添加到 Windows 中 JumpList 功能的 [Tasks][tasks] 分类中。
`tasks` 中的 `Task` 对象格式如下:
`Task` 对象
* `program` 字符串 - 执行程序的路径,通常你应该说明当前程序的路径为 `process.execPath` 字段。
* `arguments` 字符串 - 当 `program` 执行时的命令行参数。
* `title` 字符串 - JumpList 中显示的标题。
* `description` 字符串 - 对这个任务的描述。
* `iconPath` 字符串 - JumpList 中显示的 icon 的绝对路径可以是一个任意包含一个icon的资源文件。你通常可以通过指明 `process.execPath` 来显示程序中的icon。
* `iconIndex` 整数 - icon文件中的icon目录。如果一个icon文件包括了两个或多个icon就需要设置这个值以确定icon。如果一个文件仅包含一个icon那么这个值为0。
`Task` Object
* `program` String - 执行程序的路径,通常你应该说明当前程序的路径为 `process.execPath` 字段。
* `arguments` String - 当 `program` 执行时的命令行参数。
* `title` String - JumpList 中显示的标题。
* `description` String - 对这个任务的描述。
* `iconPath` String - JumpList 中显示的图标的绝对路径,可以是一个任意包含一个图标的资源文件。通常来说,你可以通过指明 `process.execPath` 来显示程序中的图标。
* `iconIndex` Integer - 图标文件中的采用的图标位置。如果一个图标文件包括了多个图标,就需要设置这个值以确定使用的是哪一个图标。
如果这个图标文件中只包含一个图标,那么这个值为 0。
### `app.allowNTLMCredentialsForAllDomains(allow)`
* `allow` Boolean
Dynamically sets whether to always send credentials for HTTP NTLM or Negotiate
authentication - normally, Electron will only send NTLM/Kerberos credentials for
URLs that fall under "Local Intranet" sites (i.e. are in the same domain as you).
However, this detection often fails when corporate networks are badly configured,
so this lets you co-opt this behavior and enable it for all URLs.
动态设置是否总是为 HTTP NTLM 或 Negotiate 认证发送证书。通常来说Electron 只会对本地网络(比如和你处在一个域中的计算机)发
送 NTLM / Kerberos 证书。但是假如网络设置得不太好,可能这个自动探测会失效,所以你可以通过这个接口自定义 Electron 对所有 URL
的行为。
### `app.makeSingleInstance(callback)`
* `callback` Function
This method makes your application a Single Instance Application - instead of
allowing multiple instances of your app to run, this will ensure that only a
single instance of your app is running, and other instances signal this
instance and exit.
这个方法可以让你的应用在同一时刻最多只会有一个实例,否则你的应用可以被运行多次并产生多个实例。你可以利用这个接口保证只有一个实例正
常运行,其余的实例全部会被终止并退出。
`callback` will be called with `callback(argv, workingDirectory)` when a second
instance has been executed. `argv` is an Array of the second instance's command
line arguments, and `workingDirectory` is its current working directory. Usually
applications respond to this by making their primary window focused and
non-minimized.
如果多个实例同时运行,那么第一个被运行的实例中 `callback` 会以 `callback(argv, workingDirectory)` 的形式被调用。其余的实例
会被终止。
`argv` 是一个包含了这个实例的命令行参数列表的数组,`workingDirectory` 是这个实例目前的运行目录。通常来说,我们会用通过将应用在
主屏幕上激活,并且取消最小化,来提醒用户这个应用已经被打开了。
The `callback` is guaranteed to be executed after the `ready` event of `app`
gets emitted.
`app``ready` 事件后,`callback` 才有可能被调用。
This method returns `false` if your process is the primary instance of the
application and your app should continue loading. And returns `true` if your
process has sent its parameters to another instance, and you should immediately
quit.
如果当前实例为第一个实例,那么在这个方法将会返回 `false` 来保证它继续运行。否则将会返回 `true` 来让它立刻退出。
On OS X the system enforces single instance automatically when users try to open
a second instance of your app in Finder, and the `open-file` and `open-url`
events will be emitted for that. However when users start your app in command
line the system's single instance machanism will be bypassed and you have to
use this method to ensure single instance.
在 OS X 中,如果用户通过 Finder、`open-file` 或者 `open-url` 打开应用,系统会强制确保只有一个实例在运行。但是如果用户是通过
命令行打开,这个系统机制会被忽略,所以你仍然需要靠这个方法来保证应用为单实例运行的。
An example of activating the window of primary instance when a second instance
starts:
下面是一个简单的例子。我们可以通过这个例子了解如何确保应用为单实例运行状态。
```js
var myWindow = null;
var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory) {
// Someone tried to run a second instance, we should focus our window.
// 当另一个实例运行的时候,这里将会被调用,我们需要激活应用的窗口
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore();
myWindow.focus();
@ -383,104 +369,109 @@ var shouldQuit = app.makeSingleInstance(function(commandLine, workingDirectory)
return true;
});
// 这个实例是多余的实例,需要退出
if (shouldQuit) {
app.quit();
return;
}
// Create myWindow, load the rest of the app, etc...
// 创建窗口、继续加载应用、应用逻辑等……
app.on('ready', function() {
});
```
### `app.setAppUserModelId(id)` _Windows_
* `id` String
改变 [Application User Model ID][app-user-model-id] 的 `id`.
改变当前应用的 [Application User Model ID][app-user-model-id] 为 `id`.
### `app.isAeroGlassEnabled()` _Windows_
This method returns `true` if [DWM composition](https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540.aspx)
(Aero Glass) is enabled, and `false` otherwise. You can use it to determine if
you should create a transparent window or not (transparent windows won't work
correctly when DWM composition is disabled).
如果 [DWM composition](https://msdn.microsoft.com/en-us/library/windows/desktop/aa969540.aspx)(Aero Glass) 启用
了,那么这个方法会返回 `true`,否则是 `false`。你可以用这个方法来决定是否要开启透明窗口特效,因为如果用户没开启 DWM那么透明窗
口特效是无效的。
Usage example:
举个例子:
```js
let browserOptions = {width: 1000, height: 800};
// Make the window transparent only if the platform supports it.
// 只有平台支持的时候才使用透明窗口
if (process.platform !== 'win32' || app.isAeroGlassEnabled()) {
browserOptions.transparent = true;
browserOptions.frame = false;
}
// Create the window.
// 创建窗口
win = new BrowserWindow(browserOptions);
// Navigate.
// 转到某个网页
if (browserOptions.transparent) {
win.loadURL('file://' + __dirname + '/index.html');
} else {
// No transparency, so we load a fallback that uses basic styles.
// 没有透明特效,我们应该用某个只包含基本样式的替代解决方案。
win.loadURL('file://' + __dirname + '/fallback.html');
}
```
### `app.commandLine.appendSwitch(switch[, value])`
通过可选的参数 `value` 给 Chromium 命令行中添加一个开关。
Append a switch (with optional `value`) to Chromium's command line.
通过可选的参数 `value` 给 Chromium 中添加一个命令行开关。
**贴士:** 这不会影响 `process.argv` ,这个方法主要被开发者用于控制一些低层级的 Chromium 行为。
**注意** 这个方法不会影响 `process.argv`,我们通常用这个方法控制一些底层 Chromium 行为。
### `app.commandLine.appendArgument(value)`
给 Chromium 命令行中加入一个参数。这个参数是当前正在被引用的
给 Chromium 中直接添加一个命令行参数,这个参数 `value` 的引号和格式必须正确
**贴士:** 这不会影响 `process.argv`
**注意** 这个方法不会影响 `process.argv`
### `app.dock.bounce([type])` _OS X_
* `type` 字符串 (可选的) - 可以是 `critical``informational`。默认下是 `informational`
* `type` String - 可选参数,可以是 `critical``informational`。默认为 `informational`
输入 `critical`dock 中的 icon 将会开始弹跳直到应用被激活或者这个请求被取消。
传入的是 `critical`dock 中的应用将会开始弹跳,直到这个应用被激活或者这个请求被取消。
当输入 `informational`dock 中的 icon 只会弹跳一秒钟。
然而,这个请求仍然会激活,直到应用被激活或者请求被取消。
当传入的是 `informational`dock 中的图标只会弹跳一秒钟。但是,这个请求仍然会激活,直到应用被激活或者请求被取消。
返回一个表示这个请求的 ID。
这个方法返回的返回值表示这个请求的 ID。
### `app.dock.cancelBounce(id)` _OS X_
* `id` 整数
* `id` Integer
取消这个 `id` 对应的请求。
### `app.dock.setBadge(text)` _OS X_
* `text` 字符串
* `text` String
设置 dock 中显示的字符。
设置应用在 dock 中显示的字符
### `app.dock.getBadge()` _OS X_
返回 dock 中显示的字符。
返回应用在 dock 中显示的字符
### `app.dock.hide()` _OS X_
隐藏 dock 中的 icon
隐藏应用在 dock 中的图标
### `app.dock.show()` _OS X_
显示 dock 中的 icon
显示应用在 dock 中的图标
### `app.dock.setMenu(menu)` _OS X_
* `menu` 菜单
* `menu` [Menu](menu.md)
设置应用的 [dock 菜单][dock-menu].
### `app.dock.setIcon(image)` _OS X_
* `image` [NativeImage](native-image.md)
设置应用在 dock 中显示的图标。
[dock-menu]:https://developer.apple.com/library/mac/documentation/Carbon/Conceptual/customizing_docktile/concepts/dockconcepts.html#//apple_ref/doc/uid/TP30000986-CH2-TPXREF103
[tasks]:http://msdn.microsoft.com/en-us/library/windows/desktop/dd378460(v=vs.85).aspx#tasks
[app-user-model-id]: https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx