downloads.download() - Mozilla

downloads.download()
====================

`downloads` API の **`download()`** 関数では URL とそのほかのオプションの設定を行うことでファイルのダウンロードをすることができます。

* HTTP もしくは HTTPS のプロトコルを使用した URL を指定した場合、対象のホスト名に対応する全ての cookie を含んだリクエストが送られます。
* `filename` と `saveAs` が指定されている場合、指定された`filename`が設定された[名前をつけて保存]のダイアログが開きます。

この関数は非同期に実行され、`Promise`を返します。

構文
--

```js
var downloading = browser.downloads.download(
  options, // object
);
```

### パラメータ

`options`

この`object`ではダウンロードしたいファイルやその他のダウンロードに関する設定を指定します。指定できるプロパティは以下です。

`body`省略可

リクエストの body を`string`で指定します。

`conflictAction`省略可

A string representing the action you want taken if there is a filename conflict, as defined in the `downloads.FilenameConflictAction` (en-US) type (defaults to "uniquify" when it is not specified).

`filename` 省略可

A `string` representing a file path relative to the default downloads directory — this provides the location where you want the file to be saved, and what filename you want to use. Absolute paths, empty paths, and paths containing back-references (`../`) will cause an error. If omitted, this value will default to the filename already given to the download file, and a location immediately inside the downloads directory.

`headers`省略可

An `array` of `objects` representing extra HTTP headers to send with the request if the URL uses the HTTP[s] protocol. Each header is represented as a dictionary object containing the keys `name` and either `value` or `binaryValue`, restricted to those allowed by `XMLHttpRequest`.

`incognito`省略可

A `boolean`: if present and set to true, then associate this download with a private browsing session. This means that it will only appear in the download manager for any private windows that are currently open.

`method`省略可

HTTP[S]を使用した URL を指定した際、HTTP メソッドを`string`で指定します。GET もしくは POST を設定できます。

`saveAs`省略可

A `boolean` that specifies whether to provide a file chooser dialog to allow the user to select a filename (`true`), or not (`false`).

If this option is omitted, the browser will show the file chooser or not based on the general user preference for this behavior (in Firefox this preference is labeled "Always ask you where to save files" in about:preferences, or `browser.download.useDownloadDir` in about:config).

`url`

ダウンロードする URL を`string`で指定します。

### 戻り値

`Promise`が返却されます。ダウンロードが成功した場合、new `downloads.DownloadItem` (en-US)の id が格納された promise を受け取ります。対して、promise が reject された場合は、エラーメッセージを受け取ります。

ブラウザーの互換性
---------

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

例
-

以下のダウンロードの例ではファイル名と保存場所を指定し、`conflictAction`に`uniquify`を指定しています。

```js
function onStartedDownload(id) {
  console.log(`Started downloading: ${id}`);
}

function onFailed(error) {
  console.log(`Download failed: ${error}`);
}

var downloadUrl = "https://example.org/image.png";

var downloading = browser.downloads.download({
  url: downloadUrl,
  filename: "my-image-again.png",
  conflictAction: "uniquify",
});

downloading.then(onStartedDownload, onFailed);
```

**メモ:** この API は Chromium の `chrome.downloads` API を元にしています。


browsingData.removeCache() - Mozilla

browsingData.removeCache()
==========================

ブラウザのキャッシュを消去します。

この関数は`browsingData.RemovalOptions` (en-US) オブジェクトを引数に取りますが無視されます。そのためこの関数を使うとすべてのキャッシュが消去されるため注意してください。

この関数は `Promise` を返す非同期関数です。

構文
--

```js
var removing = browser.browsingData.removeCache(
  removalOptions, // RemovalOptions オブジェクト
);
```

### 引数

`removalOptions` 省略可

`browsingData.RemovalOptions` (en-US) オブジェクト このパラメータは無視されます。

### 返り値

消去が完了した後に実行される `Promise` が返されます。この Promise は引数を持ちません。エラーが発生した場合はエラーメッセージを引数にして reject を呼び出します。

ブラウザーの互換性
---------

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

例
-

ブラウザキャッシュを消去します。

```js
function onRemoved() {
  console.log("removed");
}

function onError(error) {
  console.error(error);
}

browser.browsingData.removeCache({}).then(onRemoved, onError);
```

**メモ:** この API は Chromium の `chrome.browsingData` API に基づいています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


extensionTypes.RunAt - Mozilla

extensionTypes.RunAt
====================

JavaScript や CSS がどの時点でタブに挿入されるか。

型
-

この型の値は文字列です。とりうる値は、`"document_start"`, `"document_end"`, `"document_idle"` です。

* `"document_start"`: `loading` に対応します。DOM はまだ読み込み中の状態です。
* `"document_end"`: `interactive` に対応します。DOM の読み込みは終わりましたが、スクリプトや画像といったリソースはまだ読み込み中です。
* `"document_idle"`: `complete` に対応します。ドキュメントとその全てのリソースの読み込みが完了しました。

デフォルトの値は `"document_idle"` です。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.extensionTypes` API に基づいています。また、このドキュメントは `extension_types.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


extensionTypes.ImageDetails - Mozilla

extensionTypes.ImageDetails
===========================

画像のフォーマットと品質に関する詳細。

型
-

この型はオブジェクトです。以下のプロパティを持ちます。

`format`省略可

`extensionTypes.ImageFormat` (en-US) 型。出力される画像のフォーマット。デフォルトは `"png"`。

`quality`省略可

`integer` 型。フォーマットが `"jpeg"` の場合、出力される画像の品質はこの値により変化する。0 から 100 の間の数値であり、0 から 1 の間の数値に変換されて `HTMLCanvasElement.toDataURL()` の引数 `encoderOptions` として使われる。省略された場合は、92 が使われる。品質を下げると、出力される画像の視覚的な変化が大きくなり、画像の格納に必要なバイト数も小さくなる。PNG 画像の場合、この値は無視される。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.extensionTypes` API に基づいています。このドキュメントは `extension_types.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


contentScripts.register() - Mozilla

contentScripts.register()
=========================

このメソッドは一つ以上の content scripts を登録するときに使用します。

manifest.json 内の `content_scripts` に似た一つのオブジェクトを引数に持ちます。`content_scripts` では配列ですが、この `register()` ではオブジェクトを引数に持ちます。

これは `Promise` を返す非同期関数です。

構文
--

```js
var registering = browser.contentScripts.register(
  contentScriptOptions, // object
);
```

### パラメーター

`contentScriptOptions`

`object` です。`RegisteredContentScriptOptions` オブジェクトは登録するコンテントスクリプトを表します。`content_scripts` と似た構文のオブジェクトで、その違いは以下の通りです。

* プロパティ名にはスネーク形式ではなくキャメル形式を使用します (例えば、`excludeMatches`を使用します。`exclude_matches` ではありません)
* `js` プロパティと `css` プロパティには、相対パスのほかに文字列も指定できます。このため、登録したいものがどちらであるのかを明確にできる構文になっています。

`RegisteredContentScriptOptions` は次のプロパティを持ちます:

`allFrames`省略可

`content_scripts` における `all_frames` と同様です。

`css`省略可

オブジェクトの配列。 それぞれのオブジェクトは `file` という名前の manifest.json からの相対パスで登録したい CSS ファイルを指定した URL の文字列を持つプロパティか、`code` という名前の登録したい CSS の文字列を持つプロパティを含みます。

`excludeGlobs`省略可

`content_scripts` における `exclude_globs` と同様です。

`excludeMatches`省略可

`content_scripts` における `exclude_matches` と同様です。

`includeGlobs`省略可

`content_scripts` における `include_globs` と同様です。

`js`省略可

オブジェクトの配列。各オブジェクトは `file` または `code` プロパティを含み、その要素は css プロパティと同様です。

`matchAboutBlank`省略可

`content_scripts` における `match_about_blank` と同様です。

`matches`

`content_scripts` における `matches` と同様です。

`runAt`省略可

`content_scripts` における `run_at` と同様です。

### 返り値

登録したコンテントスクリプトを削除することができる `contentScripts.RegisteredContentScript` (en-US) オブジェクトを引数に持つ `Promise` を返します。

現在、登録したコンテントスクリプトは、これを登録した拡張機能ページをアンロードしたときに削除されます。したがって、コンテントスクリプトを登録する際は、少なくとも登録されたままであってほしいだけ存在する拡張機能ページから登録すべきです。

ブラウザーの互換性
---------

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

例
-

`defaultCode` コンテントスクリプトを、すべての `.org` URL に対して登録します。

```js
const defaultHosts = "\*://\*.org/\*";
const defaultCode =
  "document.body.innerHTML = '<h1>このページは書き換えられました<h1>'";

async function register(hosts, code) {
  return await browser.contentScripts.register({
    matches: [hosts],
    js: [{ code }],
    runAt: "document\_idle",
  });
}

var registered = register(defaultHosts, defaultCode);
```

次のコードは content\_scripts/example.js にある JavaScript ファイルを登録します。

```js
const scriptObj = await browser.contentScripts.register({
  js: [{ file: "/content\_scripts/example.js" }],
  matches: ["<all\_urls>"],
  allFrames: true,
  runAt: "document\_start",
});
```

### Example extensions

* content-script-register


browserAction.onClicked - Mozilla

browserAction.onClicked
=======================

ブラウザアクションアイコンがクリックされたときに発火します。このイベントはブラウザアクションがポップアップを持っているときは発火しません。

右クリックを定義するには、`contextMenus` (en-US) API の"browser\_action" context type (en-US)を利用してください。

書式
--

```js
browser.browserAction.onClicked.addListener(listener);
browser.browserAction.onClicked.removeListener(listener);
browser.browserAction.onClicked.hasListener(listener);
```

イベントは３つの関数を持っています:

`addListener(listener)`

このイベントのリスナーを追加します。

`removeListener(listener)`

このイベントのリスニングを停止します。引数`listener`は削除するリスナーです。

`hasListener(listener)`

`listener`がこのイベントに登録されているかどうかを調べます。`true`が返ればリスニング中です。`false`が返ればそうれはありません。

addListener の書式
---------------

### パラメータ

`callback`

イベントが発生したときに呼び出される関数です。関数は以下の引数を渡されます:

`tab`

`tabs.Tab`. アイコンがクリックされたときにアクティブなタブです。

ブラウザーの互換性
---------

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

例
-

ユーザがアイコンをクリックすると、アクティブなタブではアイコンを無効にし、タブの URL をログします:

```js
browser.browserAction.onClicked.addListener((tab) => {
  // disable the active tab
  browser.browserAction.disable(tab.id);
  // requires the "tabs" or "activeTab" permission
  console.log(tab.url);
});
```

### Example extensions

* bookmark-it
* favourite-colour
* find-across-tabs
* forget-it
* google-userinfo
* native-messaging
* open-my-page-button
* permissions
* runtime-examples
* store-collected-images

**メモ:** この API は Chromium の`chrome.browserAction` API に基づいています。このドキュメントは Chromium コードの`browser_action.json`から派生したものです。Microsoft Edge の互換性データは Microsoft Corporation から提供されており、Creative Commons Attribution 3.0 United States License のもとにここに含まれています。


browserAction.disable() - Mozilla

browserAction.disable()
=======================

タブに対してブラウザアクションを無効にします。つまり、タブがアクティブな時クリックされなくなります。

書式
--

```js
browser.browserAction.disable(
  tabId, // optional integer
);
```

### パラメータ

`tabId`省略可

`integer`. ブラウザアクションを無効にしたいタブの ID です。

ブラウザーの互換性
---------

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

例
-

クリックされたときブラウザアクションを無効にし、新しいタブが開かれる毎回再度有効にします:

```js
browser.tabs.onCreated.addListener(() => {
  browser.browserAction.enable();
});

browser.browserAction.onClicked.addListener(() => {
  browser.browserAction.disable();
});
```

アクティブなタブにだけブラウザアクションを無効にします:

```js
browser.browserAction.onClicked.addListener((tab) => {
  browser.browserAction.disable(tab.id);
});
```

**メモ:** This API is based on Chromium's `chrome.browserAction` API. This documentation is derived from `browser_action.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.


browserAction.ColorArray - Mozilla

browserAction.ColorArray
========================

型
-

RGBA 色を定義する、4 つの 0 から 255 の整数の`配列`です。4 つの値は以下のチャネルを指定します:

1. 赤(Red)
2. 緑(Green)
3. 青(Blue)
4. アルファ(Alpha) (不透明度)

たとえば、不透明な赤は`[255, 0, 0, 255]`です。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の`chrome.browserAction` API に基づいています。このドキュメントは Chromium コードの `browser_action.json`から派生したものです。Microsoft Edge の互換性データは Microsoft Corporation から提供されており、Creative Commons Attribution 3.0 United States License のもとにここに含まれています。


find.find() - Mozilla

find.find()
===========

テキストによるタブ内の検索をします。

次のことができます。

* 標準の HTTP(S)ページ、特権ページ(about:debugging など)の検索
* tab id を使って 特定の 1 タブのみ指定。
* ページ内の全 frame
* 大文字・小文字の区別検索、単語単位検索のみ（訳注：正規表現はなし)

デフォルトではマッチ件数ぐらいしか返ってきませんが、タブ内でのより多くの情報を得るため、次のオプションを指定することができます。

* `includeRangeData`
* `includeRectData`

結果を内部的に保持しているため、ハイライト機能は次に上書き`(find()`)されるまで次の関数で起動できます。

* `find.highlightResults()` (en-US),

この関数は asynchronous/ 非同期 関数で `Promise` を返します。

構文
--

```js
browser.find.find(
  queryphrase, // string
  options, // optional object
);
```

### 引数

`queryphrase`

`string`. 検索語。

`options`省略可

`object`. An object specifying additional options. It may take any of the following properties, all optional:

`tabId`

`integer`. ID of the tab to search. Defaults to the active tab.

`caseSensitive`

`boolean`. If true, the search is case-sensitive. Defaults to `false`.

`entireWord`

`boolean`. Match only entire words: so "Tok" will not be matched inside "Tokyo". Defaults to `false`.

`includeRangeData`

`boolean`. Include range data in the response, which describe where in the page DOM the match was found. Defaults to `false`.

`includeRectData`

`boolean`. Include rectangle data in the response, which describes where in the rendered page the match was found. Defaults to `false`.

### 返値

A `Promise` that will be fulfilled with an object containing up to three properties:

`count`

`integer`. The number of results found.

`rangeData`省略可

`array`. If `includeRangeData` was given in the `options` parameter, then this property will be included. It is provided as an array of `RangeData` objects, one for each match. `それぞれのRangeData` は DOM ツリー構造をしています。検索語の周りを表示することなどにも使えます。

次の `rectData`, も同様に配列で `rangeData[i]` と `rectData[i]`は 1 対 1 で対応します。.

Each `RangeData` contains the following properties:

`framePos`

マッチした frame 番号(訳注： iframe ごとで変わる番号). 0 は通常のページ部分で親です。 Note that the order of objects in the `rangeData` array will sequentially line up with the order of frame indexes: for example, `framePos` for the first sequence of `rangeData` objects will be 0, `framePos` for the next sequence will be 1, and so on.

`startTextNodePos`

テキスト Node の 開始側 Index（訳注：直接この値を API 一本で活用できないため、下記のサンプルを参照）

`endTextNodePos`

テキスト Node の 終端側 Index.

`startOffset`

開始 Node 内の 初めの文字列の位置.

`endOffset`

終端 Node 内の 終わりの文字列の位置

`rectData`省略可

`array`. 呼び出し時に`optionsで` `includeRectData` 引数を与えると結果を返します。 `RectData` objects の配列です。それらはマッチしたワードを含む、client rectangles を返します。拡張機能でハイライトなどに使えるでしょう。.

Each `RectData` object はそれぞれ 1 つのマッチに対して 2 つのプロパティを持ちます。

`rectsAndTexts`

1 対 1 の関係となる２つの配列を持ちます:

* `rectList`: ４つの integer をもつ配列: `top`, `left`, `bottom`, `right`. その位置情報は viewport における左上からの位置です。
* `textList`: 上記`rectList[i]`に含まれた `textList[i]` (string)を持つ配列です。

例えば Web ページ上で:

![](/ja/docs/Mozilla/Add-ons/WebExtensions/API/find/find/rects-1.png) "You may"を探すと 2 つの矩形エリアで表現されます。:

![](/ja/docs/Mozilla/Add-ons/WebExtensions/API/find/find/rects-2.png) `RectData` はこのようにマッチし、 `rectsAndTexts.rectList` と `rectsAndTexts.textList`は次のようになります。

* `textList[0]` = "You ", `rectList[0]` は HTML 上の境界を表す矩形エリアを含みます。
* `textList[1]` = "may", `rectList[1]`も"may"について同様です。

`text`

マッチしたテキスト全体、上の例では"You may"が丸ごと入ります。

ブラウザーの互換性
---------

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

例
-

### Basic examples

Search the active tab for "banana", log the number of matches, and highlight them:

```js
function found(results) {
  console.log(`There were: ${results.count} matches.`);
  if (results.count > 0) {
    browser.find.highlightResults();
  }
}

browser.find.find("banana").then(found);
```

Search for "banana" across all tabs (note that this requires the "tabs" permission, because it accesses `tab.url`):

```js
async function findInAllTabs(allTabs) {
  for (let tab of allTabs) {
    let results = await browser.find.find("banana", { tabId: tab.id });
    console.log(`In page "${tab.url}": ${results.count} matches.`);
  }
}

browser.tabs.query({}).then(findInAllTabs);
```

### Using rangeData

In this example the extension uses `rangeData` to get the context in which the match was found. The context is the complete `textContent` of the node in which the match was found. If the match spanned nodes, the context is the concatenation of the `textContent` of all spanned nodes.

Note that for simplicity, this example doesn't handle pages that contain frames. To support this you'd need to split `rangeData` into groups, one per frame, and execute the script in each frame.

The background script:

```js
// background.js

async function getContexts(matches) {
  // get the active tab ID
  let activeTabArray = await browser.tabs.query({
    active: true,
    currentWindow: true,
  });
  let tabId = activeTabArray[0].id;

  // execute the content script in the active tab
  await browser.tabs.executeScript(tabId, { file: "get-context.js" });
  // ask the content script to get the contexts for us
  let contexts = await browser.tabs.sendMessage(tabId, {
    ranges: matches.rangeData,
  });
  for (let context of contexts) {
    console.log(context);
  }
}

browser.browserAction.onClicked.addListener((tab) => {
  browser.find.find("example", { includeRangeData: true }).then(getContexts);
});
```

The content script:

```js
/\*\*
 \* Get all the text nodes into a single array
 \*/
function getNodes() {
  let walker = document.createTreeWalker(
    document,
    window.NodeFilter.SHOW\_TEXT,
    null,
    false,
  );
  let nodes = [];
  while ((node = walker.nextNode())) {
    nodes.push(node);
  }

  return nodes;
}

/\*\*
 \* Gets all text nodes in the document, then for each match, return the
 \* complete text content of nodes that contained the match.
 \* If a match spanned more than one node, concatenate the textContent
 \* of each node.
 \*/
function getContexts(ranges) {
  let contexts = [];
  let nodes = getNodes();

  for (let range of ranges) {
    let context = nodes[range.startTextNodePos].textContent;
    let pos = range.startTextNodePos;
    while (pos < range.endTextNodePos) {
      pos++;
      context += nodes[pos].textContent;
    }
    contexts.push(context);
  }
  return contexts;
}

browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
  sendResponse(getContexts(message.ranges));
});
```

### Using rectData

In this example the extension uses `rectData` to "redact" the matches, by adding black DIVs over the top of their bounding rectangles:

![](/ja/docs/Mozilla/Add-ons/WebExtensions/API/find/find/redacted.png)Note that in many ways this is a poor way to redact pages.

The background script:

```js
// background.js

async function redact(matches) {
  // get the active tab ID
  let activeTabArray = await browser.tabs.query({
    active: true,
    currentWindow: true,
  });
  let tabId = activeTabArray[0].id;

  // execute the content script in the active tab
  await browser.tabs.executeScript(tabId, { file: "redact.js" });
  // ask the content script to redact matches for us
  await browser.tabs.sendMessage(tabId, { rects: matches.rectData });
}

browser.browserAction.onClicked.addListener((tab) => {
  browser.find.find("banana", { includeRectData: true }).then(redact);
});
```

The content script:

```js
// redact.js

/\*\*
 \* Add a black DIV where the rect is.
 \*/
function redactRect(rect) {
  var redaction = document.createElement("div");
  redaction.style.backgroundColor = "black";
  redaction.style.position = "absolute";
  redaction.style.top = `${rect.top}px`;
  redaction.style.left = `${rect.left}px`;
  redaction.style.width = `${rect.right - rect.left}px`;
  redaction.style.height = `${rect.bottom - rect.top}px`;
  document.body.appendChild(redaction);
}

/\*\*
 \* Go through every rect, redacting them.
 \*/
function redactAll(rectData) {
  for (match of rectData) {
    for (rect of match.rectsAndTexts.rectList) {
      redactRect(rect);
    }
  }
}

browser.runtime.onMessage.addListener((message) => {
  redactAll(message.rects);
});
```

### Example extensions

* find-across-tabs


clipboard.setImageData() - Mozilla

clipboard.setImageData()
========================

イメージをクリップボードにコピーします。イメージはクリップボードに書き込まれる前に再エンコードされます。イメージが無効な場合、クリップボードは修正されません。

The image is provided as an `ArrayBuffer` containing the encoded image. JPEG and PNG formats are supported.

Although this API is based on Chrome's `clipboard.setImageData()` API, there are some differences:

* The Chrome API is only for apps, not extensions.
* This API requires only the `"clipboardWrite"` permission, while the Chrome version also requires the `"clipboard"` permission.
* Chrome's API uses callbacks, and this API only supports promises.
* This API does not support the `additionalItems` parameter.

これは`Promise`を返す非同期関数です。

書式
--

```js
browser.clipboard.setImageData(imageData, imageType);
```

### パラメータ

`imageData`

An `ArrayBuffer` containing the encoded image data to copy to the clipboard.

`imageType`

A `DOMString` indicating the type of image contained in `imageData`: `"png"` or `"jpeg"`.

### 返り値

A `Promise` that will be resolved with no arguments if the operation succeeded, or rejected if there was an error (for example, because the data did not represent a valid image).

ブラウザーの互換性
---------

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

例
-

Copy a remote image:

```js
// requires:
// \* the host permission for "https://cdn.mdn.mozilla.net/\*"
// \* the API permission "clipboardWrite"

fetch("https://cdn.mdn.mozilla.net/static/img/favicon144.png")
  .then((response) => response.arrayBuffer())
  .then((buffer) => browser.clipboard.setImageData(buffer, "png"));
```

Copy an image that was bundled with the extension:

```js
// requires the API permission "clipboardWrite"

fetch(browser.runtime.getURL("image.png"))
  .then((response) => response.arrayBuffer())
  .then((buffer) => browser.clipboard.setImageData(buffer, "png"));
```

**メモ:** This API is based on Chromium's `chrome.clipboard` API.


cookies.Cookie - Mozilla

cookies.Cookie
==============

`cookies` API の `Cookie` 型は HTTP cookie の情報を持ちます。

型
-

以下のプロパティを含むオブジェクトです。

`domain`

cookie の所属するドメイン (例えば "www.google.com" や "example.com") を示す文字列を持つ `string` 型です。

`expirationDate`省略可

cookie の有効期限を UNIX 時刻からの秒数で持つ `number` 型です。セッション cookie はこのプロパティを持っていません。

`firstPartyDomain`

cookie に関連付けられたファーストパーティドメインを表す文字列を格納している `string` 型です。 cookie の First-party isolation が無効の間は空文字列になります。詳細は First-party isolation をご覧ください。

`hostOnly`

`boolean` 型です。cookie がホストオンリークッキー (リクエストのホストが cookie の指定ドメインと完全一致している場合のみ送信) である場合に `true` 、でなければ `false` になります。

`httpOnly`

`boolean` 型です。 cookie に HttpOnly 属性 ( cookie をクライアント側スクリプトから参照できなくする属性) が付与されている場合に `true` 、でなければ `false` が格納されます。

`name`

cookie の名前が格納される `string` 型です。

`path`

cookie のパスが格納される `string` 型です。

`secure`

`boolean` 型です。 cookie に secure 属性(暗号化通信でのみ cookie を送信する属性)が付与されている場合に `true` 、でなければ `false` になります。

`session`

`boolean` 型です。 cookie がセッション cookie ( セッション限りで破棄される cookie )である場合に `true` 、でなければ `false` が付与されます。

`storeId`

この cookie が格納されている cookie ストアの ID を格納する `string` 型です。`cookies.getAllCookieStores()` (en-US)によって提供されます。

`value`

cookie の値を格納する `string` 型です。

ブラウザーの互換性
---------

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

例
-

cookies API のほとんどは入力パラメータまたは戻り値の一部として使用される `Cookie` オブジェクトを含みます。例えば `cookies.getAll()` (en-US) は `Cookie` オブジェクトの配列を返します。

以下の例ではすべての cookie を取得し、コンソールログに `Cookie` オブジェクト中のいくつかのプロパティを出力します。

```js
function logCookies(cookies) {
  for (cookie of cookies) {
    console.log(`Domain: ${cookie.domain}`);
    console.log(`Name: ${cookie.name}`);
    console.log(`Value: ${cookie.value}`);
    console.log(`Persistent: ${!cookie.session}`);
  }
}

var gettingAll = browser.cookies.getAll({});
gettingAll.then(logCookies);
```

**メモ:** この API は Chromium の `chrome.cookies` API に基づいています。 また、このドキュメントは `cookies.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


windows.WindowType - Mozilla

windows.WindowType
==================

これはブラウザウィンドウの種類です。

型
-

値の型は`strings`です。可能な値は以下:

* `"normal"`
* `"popup"`
* `"panel"`
* `"devtools"`
ブラウザーの互換性
---------

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

**メモ:** This API is based on Chromium's `chrome.windows` API. This documentation is derived from `windows.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.


windows.WindowState - Mozilla

windows.WindowState
===================

ブラウザーウィンドウの状態です。

型
-

この値の型は `strings` です。可能な値は以下のとおりです。

`"normal"`

このウィンドウは既定のサイズまたはユーザー指定のサイズです。

`"minimized"`

このウィンドウはアイコンとしてタスクバーの中にだけ表示されています。

`"maximized"`

このウィンドウはオペレーティングシステムによって予約されている画面領域を除く画面全体を埋め尽くしています。

`"fullscreen"`

ウィンドウは全画面アプリケーションとして動作しているか、タブのコンテンツが全画面 APIを利用しています。。

`"docked"`

ドックされたウィンドウは、同じアプリケーションで所有されている他のウィンドウとの相対的な位置が固定されます。

macOS の互換性: macOS 10.10 から、ウィンドウの既定の最大化動作が変更され、アプリケーションを「ズーム」ウィンドウではなく全画面アプリケーションとして実行するようになりました。全画面 (`fullscreen`) は、全画面アプリケーションとして実行されているブラウザーと、全画面 API を使用しているタブ内のコンテンツの両方を指します。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.windows` API に基づいています。この記事は Chromium コードの `windows.json` から派生しています。


bookmarks.onRemoved - Mozilla

bookmarks.onRemoved
===================

ブックマークやフォルダが削除された際に発火します。フォルダが再帰的に削除された場合は、そのフォルダに対して 1 回だけ発火し、そのフォルダの中身に関しては発火しません。

構文
--

```js
browser.bookmarks.onRemoved.addListener(function(
  id,        // 文字列
  removeInfo // オブジェクト
) {...})
browser.bookmarks.onRemoved.removeListener(listener)
browser.bookmarks.onRemoved.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数には以下の引数が渡ります。

`id`

削除された要素の ID を表す `string`

`removeInfo`

削除された要素の詳細を含んだ `object`

付随するオブジェクト
----------

### removeInfo

`parentId`

要素の親の ID を表す `string`

`index`

この要素が親からみて何番目にあるかを表す 0 以上の整数

`node`

削除された要素に関する詳細を含む `bookmarks.BookmarkTreeNode`

ブラウザーの互換性
---------

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

例
-

```js
function handleRemoved(id, removeInfo) {
  console.log("Item: " + id + " removed");
  console.log("Title: " + removeInfo.node.title);
  console.log("Url: " + removeInfo.node.url);
}

function handleClick() {
  chrome.bookmarks.onRemoved.addListener(handleRemoved);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

### Example extensions

* bookmark-it

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.removeTree() - Mozilla

bookmarks.removeTree()
======================

**`bookmarks.removeTree()`** は、ブックマークフォルダやその要素を再帰的に削除するメソッドです。

ブックマークが見つからなかった場合は `runtime.lastError` がセットされ、エラーの有無はコールバック内で確認できます。

構文
--

```js
browser.bookmarks.removeTree(
  id, // 文字列
  callback, // 関数（省略可）
);
```

### 引数

`id`

子要素とともに削除されるフォルダノードの ID を表す `string` です。

`callback`省略可

ノードが削除された際に実行される関数です。この関数に渡される引数はありません。

ブラウザーの互換性
---------

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

使用例
---

以下の例は、"MDN" という名前のフォルダを探し、それ自身とその子要素をすべて削除するものです。

```js
function onRemoved() {
  if (chrome.runtime.lastError) {
    console.log(chrome.runtime.lastError);
  } else {
    console.log("bookmark item removed!");
  }
}

function removeMDN(searchResults) {
  if (searchResults.length) {
    chrome.bookmarks.removeTree(searchResults[0].id, onRemoved);
  }
}

chrome.bookmarks.search({ title: "MDN" }, removeMDN);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.onMoved - Mozilla

bookmarks.onMoved
=================

ブックマークやフォルダが、異なる親フォルダやフォルダ内の別の場所へ移された際に発火します。

構文
--

```js
browser.bookmarks.onMoved.addListener(function(
  id,      // 文字列
  moveInfo // オブジェクト
) {...})
browser.bookmarks.onMoved.removeListener(listener)
browser.bookmarks.onMoved.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数には以下の引数が渡ります。

`id`

移動した要素の ID を表す `string` です。

`moveInfo`

移動に関する詳細を含んだ `object` です。

付随するオブジェクト
----------

### moveInfo

`parentId`

新しい親フォルダを表す `string`

`index`

この要素が親から見て何番目にあるかを表す整数

`oldParentId`

移動前の親フォルダを表す `string`

`oldIndex`

`移動前において、`この要素が親から見て何番目にあったかを表す整数

ブラウザーの互換性
---------

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

例
-

```js
function handleMoved(id, moveInfo) {
  console.log("Item: " + id + " moved");
  console.log("Old index: " + moveInfo.oldIndex);
  console.log("New index: " + moveInfo.index);
  console.log("Old folder: " + moveInfo.oldParentId);
  console.log("New folder: " + moveInfo.parentId);
}

function handleClick() {
  chrome.bookmarks.onMoved.addListener(handleMoved);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge compatibility の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.BookmarkTreeNodeUnmodifiable - Mozilla

bookmarks.BookmarkTreeNodeUnmodifiable
======================================

**`bookmarks.BookmarkTreeNodeUnmodifiable`** 型は、ブックマークツリー上のノード（ブックマーク / フォルダー）が変更不可な理由を表すものです。この型は、ブックマークノードの `bookmarks.BookmarkTreeNode.unmodifiable.unmodifiable` プロパティで使用されます。

値の型
---

この値は `string` 型であり、現在取りうる値は `"managed"` のみです。すなわち、システム管理者（ペアレンタルコントロールが有効な場合は保護者）がこのブックマークノードを設定したことを意味します。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.CreateDetails - Mozilla

bookmarks.CreateDetails
=======================

`CreateDetails` 型は、新しいブックマークやフォルダのプロパティを表すためのオブジェクト型です。`bookmarks.create()` メソッドの呼び出し時に渡します。

**メモ:** 現在、ブックマークリストのセパレータをこのオブジェクト型で表すことはできません。

値の型
---

以下のプロパティを含む `object` です。

`parentId`省略可

新しいブックマーク / フォルダの親フォルダを指定する `string` です。デフォルト値はブラウザによって異なり、Chrome の場合は「その他のブックマーク」、Firefox の場合は「未分類のブックマーク」です。

`index`省略可

親要素の配下における、新しいブックマーク / フォルダの位置を指定する `number` です。値が 0 の場合、リストの先頭に置かれます。

`title`省略可

`作成する`ブックマークのタイトルやフォルダの名前を指定する `string` です。値を省略した場合、タイトルは `""` になります。

`url`省略可

ブックマークの URL を指定する `string` です。値を省略するか `null` を指定した場合、ブックマークではなくフォルダが作成されます。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.search() - Mozilla

bookmarks.search()
==================

**`bookmarks.search()`** 関数は、指定したクエリにマッチするブックマークを検索するものです。マッチしたブックマークは、`bookmarks.BookmarkTreeNode` オブジェクトの配列として、指定されたコールバック関数の引数に渡されます。

入力引数の値や型が不正だった場合、この関数は例外を送出します。エラーメッセージはコンソールで確認できます。送出された例外はエラー ID を含んでおらず、またメッセージを変更される可能性があるため、これらを解析するようなコードは書かないでください。

構文
--

```js
browser.bookmarks.search(
  query, // 文字列またはオブジェクト
  callback, // 関数
);
```

### 引数

`query`

実行するクエリを表す `string` または `object` です。

`query` を文字列で指定する場合、`query` は 0 個以上の検索項から構成されます。検索項はスペースで区切りますが、複数語からなる句を検索したい場合は引用符でくくります。それぞれの検索項はブックマークの URL やタイトルの部分文字列にマッチします（大文字・小文字は区別されません）。あるブックマークがクエリにマッチするには、クエリの検索項すべてがマッチしなければなりません。

`query` をオブジェクトで指定する場合、以下の 3 つのプロパティのうち 0 個以上を指定することになります。あるブックマークがクエリにマッチするには、指定されたプロパティすべてにおいてマッチしなければなりません。

`query`省略可

1 つ以上の検索項を含んだ `string` を指定します。このフォーマットは `query` 引数における文字列のフォーマットと同じです。このプロパティ値が `string` でなかった場合、 例外が送出されます。

`url`省略可

ブックマークの URL と完全一致しなければならない `string` `を指定します。`マッチの際に大文字・小文字は区別されず、また末尾のスラッシュも無視されます。

無効な URL を指定した場合、例外が送出されます。

`title`省略可

ブックマークのタイトルと完全一致しなければならない `string` `を指定します。`マッチの際には大文字・小文字が区別されます。

`callback`

クエリの結果が得られた場合に呼び出される関数を指定します。この関数には以下の引数が渡ります。

`results`

`bookmarks.BookmarkTreeNode` オブジェクトの配列であり、各要素はマッチしたブックマークをそれぞれ表しています。何も見つからなかった場合は空の配列となります。

ブラウザーの互換性
---------

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

使用例
---

以下の例は、ブックマークすべての ID を出力するものです。

```js
function onGot(bookmarkItems) {
  for (item of bookmarkItems) {
    console.log(item.id);
  }
}

chrome.bookmarks.search({}, onGot);
```

以下の例は、その時にアクティブなタブがブックマークされているかどうかを確認するものです。

```js
function onGot(bookmarkItems) {
  if (bookmarkItems.length) {
    console.log("active tab is bookmarked");
  } else {
    console.log("active tab is not bookmarked");
  }
}

function checkActiveTab(tab) {
  chrome.bookmarks.search({ url: tab.url }, onGot);
}

chrome.browserAction.onClicked.addListener(checkActiveTab);
```

### Example extensions

* bookmark-it

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.onImportBegan - Mozilla

bookmarks.onImportBegan
=======================

ブックマークのインポートが開始した際に発火します。

ブックマークをインポートしている間、`onCreated` が何度も発火する場合があります。`onCreated` に紐づけるリスナ関数の処理が重い場合には、`onImportBegan` と `onImportEnded` をリッスンし、`onImportEnded` が発火するまでは `onCreated` を無視してください。他のイベントは通常通り処理できます。

構文
--

```js
browser.bookmarks.onImportBegan.addListener(function() {...})
browser.bookmarks.onImportBegan.removeListener(listener)
browser.bookmarks.onImportBegan.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数に渡される引数はありません。

ブラウザーの互換性
---------

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

使用例
---

```js
function handleImportBegan() {
  console.log("Importing...");
}

function handleImportEnded() {
  console.log("...finished.");
}

function handleClick() {
  chrome.bookmarks.onImportBegan.addListener(handleImportBegan);
  chrome.bookmarks.onImportEnded.addListener(handleImportEnded);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License. に従います。


bookmarks.onCreated - Mozilla

bookmarks.onCreated
===================

ブックマークやフォルダが作成された際に発火します。

構文
--

```js
browser.bookmarks.onCreated.addListener(function(
  id,      // 文字列
  bookmark // BookmarkTreeNode
) {...})
browser.bookmarks.onCreated.removeListener(listener)
browser.bookmarks.onCreated.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される `function` です。この関数には以下の引数が渡ります。

`id`

`string`.

`bookmark`

`bookmarks.BookmarkTreeNode`.

ブラウザーの互換性
---------

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

### Example extensions

* bookmark-it

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.get() - Mozilla

bookmarks.get()
===============

**`bookmarks.get()`** は、指定した `bookmarks.BookmarkTreeNode` の ID（または ID の配列）にマッチするノードを取得するメソッドです。

構文
--

```js
browser.bookmarks.get(
  idOrIdList, // 文字列または文字列の配列
  callback, // 関数
);
```

### 引数

`idOrIdList`

取得したい `BookmarkTreeNode` オブジェクトの ID を指定した `string` または `string` の {[jsxref("array")}} です。

`callback`

ノードが取得された際に実行される `function` です。この関数には以下の引数が渡ります。

`results`

各要素が `bookmarks.BookmarkTreeNode` である、マッチしたノードの `array` です。セパレータは結果の戻り値に含まれません。ノードが見つからなかった場合の `results` は `undefined` となり、`runtime.lastError` がセットされます。

ブラウザーの互換性
---------

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

使用例
---

以下の例は、特定の ID を持つブックマークが存在するかどうかを確認するものです。

```js
function onGot(bookmarkItems) {
  if (bookmarkItems) {
    console.log("bookmark exists!");
  } else {
    console.log("bookmark does not exist!");
    console.log("lasterror: " + chrome.runtime.lastError);
  }
}

function doesBookmarkExist(bookmarkId) {
  browser.bookmarks.get(bookmarkId, onGot);
}
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードに基づいて作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.onImportEnded - Mozilla

bookmarks.onImportEnded
=======================

ブックマークのインポートが終了した際に発火します。

`bookmarks.onImportBegan` も参照してください。

構文
--

```js
browser.bookmarks.onImportEnded.addListener(function() {...})
browser.bookmarks.onImportEnded.removeListener(listener)
browser.bookmarks.onImportEnded.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数に渡される引数はありません。

ブラウザーの互換性
---------

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

使用例
---

```js
function handleImportBegan() {
  console.log("Importing...");
}

function handleImportEnded() {
  console.log("...finished.");
}

function handleClick() {
  chrome.bookmarks.onImportBegan.addListener(handleImportBegan);
  chrome.bookmarks.onImportEnded.addListener(handleImportEnded);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


bookmarks.getRecent() - Mozilla

bookmarks.getRecent()
=====================

**`bookmarks.getRecent()`** は、最近に追加されたブックマークを指定した最大個数まで取得し、`BookmarkTreeNode` オブジェクトの配列としてコールバック関数に渡します。

構文
--

```js
browser.bookmarks.getRecent(
  numberOfItems, // 整数
  callback, // 関数
);
```

### 引数

`numberOfItems`

取得する要素の最大個数を指定する整数です。最近追加された要素のうち、ここで指定した個数までが戻り値のリストに含まれます。

`callback`

リストが取得された際に実行される関数です。この関数には以下の引数が渡ります。

`results`

各要素が 1 つのブックマークノードを表す `bookmarks.BookmarkTreeNode` オブジェクトの `array`

ブラウザーの互換性
---------

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

使用例
---

以下の例は、直近に追加されたブックマークの URL を出力するものです。

```js
function gotMostRecent(bookmarkItems) {
  if (bookmarkItems.length) {
    console.log(bookmarkItems[0].url);
  }
}

chrome.bookmarks.getRecent(1, gotMostRecent);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードに基づいて作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.onChanged - Mozilla

bookmarks.onChanged
===================

以下の変更に対して発火します。

* ブックマークのタイトルまたは URL
* フォルダの名前
構文
--

```js
browser.bookmarks.onChanged.addListener(function(
  id,        // 文字列
  changeInfo // オブジェクト
) {...})
browser.bookmarks.onChanged.removeListener(listener)
browser.bookmarks.onChanged.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数には以下の引数が渡ります。

`id`

変更を受けた要素の ID を表す `string`

`changeInfo`

変更に関する詳細を含んだ `object`

付随するオブジェクト
----------

### changeInfo

`title`

変更された要素のタイトルを表す `string`

`url`省略可

変更された要素の URL を表す `string`。要素がフォルダだった場合に値は入りません。

ブラウザーの互換性
---------

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

使用例
---

```js
function handleChanged(id, changeInfo) {
  console.log("Item: " + id + " changed");
  console.log("Title: " + changeInfo.title);
  console.log("Url: " + changeInfo.url);
}

function handleClick() {
  chrome.bookmarks.onChanged.addListener(handleChanged);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.getChildren() - Mozilla

bookmarks.getChildren()
=======================

**`bookmarks.getChildren()`** は、ブックマークフォルダの ID を `BookmarkTreeNode` で指定し、その直下にあたる子要素をすべて取得します。

構文
--

```js
browser.bookmarks.getChildren(
  id, // 文字列
  callback, // 関数
);
```

### 引数

`id`

取得したい子要素を持つフォルダ ID を指定する `string` です。

`callback`

子ノードのリストが取得された際に実行される関数です。この関数には以下の引数が渡ります。

`results`

各要素が 1 つの子ノードを表す、`bookmarks.BookmarkTreeNode` の `array` です。要素の順序は、UI に表示されているのと同じ順番です。現在、セパレータの有無は結果に含まれません。指定したノードに子要素が含まれていなかった場合、`results` は空配列となります。

ブラウザーの互換性
---------

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

使用例
---

### 基本的な使い方

```js
function gotChildren(children) {
  console.log(children);
}

chrome.bookmarks.getChildren(bookmarkItemId, gotChildren);
```

### 指定したフォルダでブックマークを切替

以下の例は、フォルダを `BookmarkTreeNode` で指定し、そのフォルダに新しいブックマークを作成するものです。ただし、既に同じ名前のブックマークがあった場合は、逆に既存のブックマークを削除することとします。このとき新しいブックマークは作成されません。

```js
function toggleBookmark(folderNode, title, url) {
  chrome.bookmarks.getChildren(folderNode.id, function (results) {
    let node = results.find(function (el) {
      return el.title === title;
    });

    // ブックマークが存在する場合は削除する
    // そうでなければ新しく作成する

    if (node !== undefined) {
      chrome.bookmarks.remove(node.id);
    } else {
      chrome.bookmarks.create({
        parentId: folderNode.id,
        title: title,
        url: url,
      });
    }
  });
}
```

先の `toggleBookmark()` 関数は、`folderNode` で指定した `BookmarkTreeNode` の中に既に存在しているすべてのブックマークのリストを取得するため、最初に `bookmarks.getChildren()` を呼び出しています。

コールバックに指定された匿名関数には `results` という引数が 1 つ渡されます。この引数は、フォルダの直下にある子要素をすべて含んだ配列です。まず初めに、与えられたタイトルを持つノードがフォルダに存在するかどうかを調べます。ここでは `Array.find()` メソッドを使い、タイトルが等しいかどうかをコールバック内で判定しています。

マッチするノードがあった場合（すなわち、`node` が `undefined` ではない場合）、指定した `title` を持つブックマークが既に存在していたことが分かったので、既存のブックマークを削除するために `bookmarks.remove()` を呼び出します。

そうではなかった場合、新しいブックマークを作成するために `bookmarks.create()` が呼び出します。この際、引数 `folderNode` で与えられていたフォルダ ID を新しい親フォルダの ID に指定し、合わせて `title` と `url` も指定します。

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.create() - Mozilla

bookmarks.create()
==================

**`bookmarks.create()`** は、`parentId` で指定した `BookmarkTreeNode` の配下に、ブックマークやフォルダを作成するメソッドです。フォルダを作成する場合は、`CreateDetails.url` の引数を省略するか空にします。

構文
--

```js
browser.bookmarks.create(
  bookmark, // CreateDetails
  callback, // 関数（省略可）
);
```

### 引数

`bookmark`
`bookmarks.CreateDetails`
`callback`省略可

ブックマークが新しく作成された際に呼び出される `function` です。この関数は以下の引数を 1 つ受け取ります。

`result`

新しく作成されたブックマークノードを表す `bookmarks.BookmarkTreeNode`

ブラウザーの互換性
---------

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

使用例
---

以下の例は、このページのブックマークをデフォルトのフォルダ（Firefox は「未分類のブックマーク」、Chrome は「その他のブックマーク」）に作成するものです。

```js
function onBookmarkAdded(bookmarkItem) {
  console.log("Bookmark added with ID: " + bookmarkItem.id);
}

chrome.bookmarks.create(
  {
    title: "bookmarks.create() on MDN",
    url: "https://developer.mozilla.org/Add-ons/WebExtensions/API/bookmarks/create",
  },
  onBookmarkAdded,
);
```

### Example extensions

* bookmark-it

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードに基づいています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.getSubTree() - Mozilla

bookmarks.getSubTree()
======================

**`bookmarks.getSubTree()`** は、ID を指定して `bookmarks.BookmarkTreeNode` を非同期に取得するメソッドです。

対象がフォルダの場合、`children` プロパティを再帰的にたどることで、すべての子要素にアクセスすることができます。

構文
--

```js
browser.bookmarks.getSubTree(
  id, // 文字列
  callback, // 関数
);
```

### 引数

`id`

取得したい部分木のルートノードに対応する ID を表す `string` です。

`callback`

リクエストしたノードが取得された際に呼び出される関数です。この関数には以下の引数が渡ります。

`results`

指定した ID に対応する `bookmarks.BookmarkTreeNode` オブジェクトが 1 つ含まれた配列

ブラウザーの互換性
---------

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

例
-

以下の例は、指定したノードの配下にある部分木を再帰的に出力するものです。

```js
function makeIndent(indentLength) {
  return ".".repeat(indentLength);
}

function logItems(bookmarkItem, indent) {
  if (bookmarkItem.url) {
    console.log(makeIndent(indent) + bookmarkItem.url);
  } else {
    console.log(makeIndent(indent) + "Folder");
    indent++;
  }
  if (bookmarkItem.children) {
    for (child of bookmarkItem.children) {
      logItems(child, indent);
    }
  }
  indent--;
}

function logSubTree(bookmarkItems) {
  logItems(bookmarkItems[0], 0);
}

function handleClick() {
  var subTreeID = "unfiled\_\_\_\_\_";
  chrome.bookmarks.getSubTree(subTreeID, logSubTree);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.onChildrenReordered - Mozilla

bookmarks.onChildrenReordered
=============================

UI で表示されている順序に伴って子フォルダの順序も変更された際に発火します。`bookmarks.move()` の実行後や、UI におけるドラッグの際には発火しません。

構文
--

```js
browser.bookmarks.onChildrenReordered.addListener(function(
  id,         // 文字列
  reorderInfo // オブジェクト
) {...})
browser.bookmarks.onChildrenReordered.removeListener(listener)
browser.bookmarks.onChildrenReordered.hasListener(listener)
```

このイベントには 3 つのメソッドが用意されています。

`addListener(callback)`

イベントリスナを追加します。

`removeListener(listener)`

イベントリスナを削除します。引数 `listener` には削除したいリスナを指定します。

`hasListener(listener)`

`listener` がイベントリスナとして登録されているか確認します。登録されていれば `true` を、それ以外の場合は `false` を返します。

addListener の構文
---------------

### 引数

`callback`

イベントが発火した際に呼び出される関数を指定します。この関数には以下の引数が渡ります。

`id`

子要素の順序が変更されたフォルダの ID を表す `string` です。

`reorderInfo`

詳細情報を含んだ `object` です。

付随するオブジェクト
----------

### reorderInfo

`childIds`

`string` の `array` です。このフォルダに含まれるブックマーク要素すべての ID が含まれており、UI に表示されているのと同じ順番に並んでいます。

ブラウザーの互換性
---------

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

使用例
---

```js
function handleChildrenReordered(id, reorderInfo) {
  console.log("Item: " + id + " children reordered");
  console.log("Children: " + reorderInfo.childIds);
}

function handleClick() {
  chrome.bookmarks.onChildrenReordered.addListener(handleChildrenReordered);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License. に従います。


bookmarks.BookmarkTreeNodeType - Mozilla

bookmarks.BookmarkTreeNodeType
==============================

**`bookmarks.BookmarkTreeNodeType`** 型は、ブックマークツリーのノードがブックマーク、フォルダーまたはセパレーターであるかどうかを示すために使用されます。

型
-

`bookmarks.BookmarkTreeNodeType` は以下の 3 つのうちいずれかの値を取りうる `string` です。

* `"bookmark"`: ノードがブックマークであることを示します。
* `"folder"`: ノードがフォルダーであることを示します。
* `"separator"`: ノードがセパレータであることを示します。
ブラウザーの互換性
---------

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


bookmarks.update() - Mozilla

bookmarks.update()
==================

**`bookmarks.update()`** は、ブックマークの URL やタイトル、またはフォルダの名前を更新するメソッドです。

ブックマーク要素が見つからなかった場合には `runtime.lastError` がセットされるので、エラーの有無をコールバックで確認できます。

構文
--

```js
browser.bookmarks.update(
  id, // 文字列
  changes, // オブジェクト
  callback, // 関数（省略可）
);
```

### 引数

`id`

更新したいブックマーク / フォルダの ID を表す `string` です。

`changes`

適用したい変更内容を表す `object` であり、以下のプロパティから構成されます。指定しなかったプロパティについて、ブックマークやフォルダが変更されることはありません。

`title`省略可

`id` がフォルダを表す場合、ブックマークの新しいタイトル / フォルダの新しい名前を指定する `string` です。

`url`省略可

ブックマークの新しい URL を指定する `string` です。

`callback`省略可

変更が適用された際に実行される関数です。この関数には次の引数が 1 つ渡ります。

`result`

更新されたブックマークを表す`bookmarks.BookmarkTreeNode` オブジェクトです。

ブラウザーの互換性
---------

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

使用例
---

### フォルダのリネーム

以下の例は、"MDN" という名前のフォルダすべてを "MDN" to "Mozilla Developer Network (MDN)" にリネームするものです。

```js
function updateFolders(items) {
  for (item of items) {
    // only folders, so skip items with a `url`
    if (!item.url) {
      chrome.bookmarks.update(item.id, {
        title: "Mozilla Developer Network (MDN)",
      });
    }
  }
}

chrome.bookmarks.search({ title: "MDN" }, updateFolders);
```

**メモ:** This API is based on Chromium's `chrome.bookmarks` API. This documentation is derived from `bookmarks.json` in the Chromium code.Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.move() - Mozilla

bookmarks.move()
================

**`bookmarks.move()`** は、指定した `BookmarkTreeNode` をブックマークツリー内の所望の位置に移すメソッドです。このメソッドにより、ブックマークを新しいフォルダの中や、同じフォルダ内の別の場所に移動させることができます。

構文
--

```js
browser.bookmarks.move(
  id, // 文字列
  destination, // オブジェクト
  callback, // 関数（省略可）
);
```

### 引数

`id`

移動させるブックマーク / フォルダの ID を表す `string` です。

`destination`

ブックマークの移動先を表す `object` です。このオブジェクトには以下のプロパティが必ず 1 つ以上含まれます。

`parentId` 省略可

移動先フォルダの ID を指定する `string` です。この値が省略された場合、現在と同じフォルダ内の新しい場所へ移動されます。

`index` 省略可

移動先フォルダ内における位置を指定する 0 起点のインデックスです。値が 0 の場合、そのフォルダの先頭に移動されます。値が省略された場合、新しい親フォルダ内の最後に移動されます。

`callback` 省略可

移動が終了した際に呼び出される `function` です。この関数は以下の引数を 1 つ受け取ります。

`result`

移動された新しいノードを表す `BookmarkTreeNode`

ブラウザーの互換性
---------

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

使用例
---

### ブックマークを現在のフォルダの先頭へ移動

次の例は、既存のブックマークを現在のフォルダの先頭へ移動させるものです。移動後に必要な処理は特にないため、ここではコールバック無しで呼び出しています。

```js
browser.bookmarks.move(bookmarkID, { index: 0 });
```

### ブックマークを異なるフォルダへ移動

以下の例は、ID で指定したブックマークを、別の ID で指定したフォルダへ移動させる関数です。今回は、移動後に実行されるコールバック関数も指定しています。

```js
function moveToFolder(bookmarkId, destinationId) {
  browser.bookmarks.move(
    bookmarkId,
    { parentId: destinationId },
    function (updatedNode) {
      /\* ブックマークの移動後に行う処理 \*/
    },
  );
}
```

**メモ:** この API は Chromium `の``chrome.bookmarks` API に基づいています。また、このドキュメント は `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.BookmarkTreeNode - Mozilla

bookmarks.BookmarkTreeNode
==========================

`bookmarks.BookmarkTreeNode` 型のオブジェクトは、ブックマークツリー上のノード（ブックマーク / フォルダ）を表現するものです。子ノードは親フォルダの中で `index` に従って順序付けされます。

値の型
---

以下のプロパティを含む `object` です。

`id`

そのノードを一意に識別する `string` です。この ID はユーザのプロファイル内で固有であり、ブラウザを再起動した後も有効です。

`parentId` 省略可

親フォルダの ID を表す `string` です。ルートノードの場合は省略されます。

`index` 省略可

親フォルダの中におけるノードの位置を表す 0 以上の `number` です。0 は先頭の要素を意味します。

`url` 省略可

ブックマークの URL を表す `string` です。フォルダの場合は省略されます。

`title`

ブックマークリストやメニューにノードが表示される際のテキストを表す `string` です。

`dateAdded` 省略可

このノードが生成された時刻を 1970 年 1 月 1 日からの経過ミリ秒 で表す `number` です。

`dateGroupModified` 省略可

その内容の最終変更時刻を 1970 年 1 月 1 日からの経過ミリ秒 で表す `number` です。

`unmodifiable` 省略可

`bookmarks.BookmarkTreeNodeUnmodifiable` 型で表現される `string` です。このノードが変更不可である理由を表します。変更可能な場合には省略されます。

`children` 省略可

各要素がノードの子要素を表す、`bookmarks.BookmarkTreeNode` の `array` です。リストの要素は UI に表示されているのと同じ順序で並びます。フォルダ以外の場合は省略されます。

**メモ:** 現在、ブックマークリストのセパレータをこのオブジェクトで表すことはできません。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.getTree() - Mozilla

bookmarks.getTree()
===================

**`bookmarks.getTree()`** は、ブックマークツリーのルートを表した`bookmarks.BookmarkTreeNode` オブジェクトの配列を返します。

構文
--

```js
browser.bookmarks.getTree(
  callback, // 関数
);
```

### 引数

`callback`

ルートに相当するノードが取得された際に実行される関数です。この関数には以下の引数が渡ります。

`results`

ルートノードを表す `bookmarks.BookmarkTreeNode` オブジェクトが 1 つ含まれた配列

ブラウザーの互換性
---------

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

例
-

以下の例は、ブックマークツリー全体を出力するものです。

```js
function makeIndent(indentLength) {
  return ".".repeat(indentLength);
}

function logItems(bookmarkItem, indent) {
  if (bookmarkItem.url) {
    console.log(makeIndent(indent) + bookmarkItem.url);
  } else {
    console.log(makeIndent(indent) + "Folder");
    indent++;
  }
  if (bookmarkItem.children) {
    for (child of bookmarkItem.children) {
      logItems(child, indent);
    }
  }
  indent--;
}

function logTree(bookmarkItems) {
  logItems(bookmarkItems[0], 0);
}

function handleClick() {
  chrome.bookmarks.getTree(logTree);
}

chrome.browserAction.onClicked.addListener(handleClick);
```

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


bookmarks.remove() - Mozilla

bookmarks.remove()
==================

**`bookmarks.remove()`** は、ブックマークや空のブックマークフォルダを削除するメソッドです。

ブックマークが見つからなかった、またはフォルダが空ではなかった場合には `runtime.lastError` がセットされ、エラーの有無はコールバック内で確認できます。

構文
--

```js
browser.bookmarks.remove(
  id, // 文字列
  callback, // 関数（省略可）
);
```

### 引数

`id`

削除したいブックマーク / 空フォルダの ID を指定する `string` です。

`callback`省略可

ブックマークやフォルダが削除された際に実行される関数です。この関数に渡される引数はありません。

ブラウザーの互換性
---------

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

使用例
---

以下の例はブックマークを削除するものです。

```js
function onRemoved() {
  if (chrome.runtime.lastError) {
    console.log(chrome.runtime.lastError);
  } else {
    console.log("bookmark item removed!");
  }

}

chrome.bookmarks.remove(bookmarkItemId");
```

### Example extensions

* bookmark-it

**メモ:** この API は Chromium の `chrome.bookmarks` API に基づいています。また、このドキュメントは `bookmarks.json` における Chromium のコードから作成されています。Microsoft Edge の実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従います。


i18n.getAcceptLanguages() - Mozilla

i18n.getAcceptLanguages()
=========================

ブラウザーの accept-languages を取得します。これは、ブラウザーに使用されているロケールとは異なります。ロケールを取得するには、`i18n.getUILanguage` を使用してください。

これは、`Promise` を返す非同期関数です。

構文
--

```js
var gettingAcceptLanguages = browser.i18n.getAcceptLanguages();
```

### 引数

なし。

### 戻り値

``i18n.LanguageCode`` オブジェクトの `配列` で処理が完了した `Promise`。

ブラウザーの互換性
---------

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

例
-

```js
function onGot(languages) {
  console.log(languages);
  //e.g. Array [ "en-US", "en" ]
}

var gettingAcceptLanguages = browser.i18n.getAcceptLanguages();
gettingAcceptLanguages.then(onGot);
```

**メモ:** この API は、Chromium の `chrome.i18n` API を基にしています。このドキュメンテーションは、Chromium コード内の `i18n.json` に由来しています。Microsoft Edge 互換性データは、Microsoft Corporation より供給され、Creative Commons Attribution 3.0 United States License の下で含まれています。


i18n.detectLanguage() - Mozilla

i18n.detectLanguage()
=====================

提供されたテキストの言語を Compact Language Detector (CLD) を利用して検出します。

これは、`Promise` を返す非同期関数です。

構文
--

```js
var detectingLanguages = browser.i18n.detectLanguage(
  text, // string
);
```

### 引数

`text`

`文字列`。翻訳されるユーザー入力の文字列です。

### 戻り値

結果オブジェクトで解決される `Promise`。結果オブジェクトは 2 個のプロパティを持ちます:

`isReliable`

`真偽値`。検出された言語が確かかどうかを示します。

`languages`

オブジェクトの `配列`。配列の各項目はさらに 2 個のプロパティを持ちます:

`language`

`i18n.LanguageCode`。検出された言語です。

`percentage`

`整数値`。検出された言語で入力された文字列の割り合い。

ブラウザーの互換性
---------

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

例
-

```js
function onLanguageDetected(langInfo) {
  for (lang of langInfo.languages) {
    console.log("Language is: " + lang.language);
    console.log("Percentage is: " + lang.percentage);
  }
}

var text = "L'homme est né libre, et partout il est dans les fers.";

var detecting = browser.i18n.detectLanguage(text);
detecting.then(onLanguageDetected);
```

**メモ:** この API は、Chromium の `chrome.i18n` API を基にしています。このドキュメンテーションは、Chromium コード内の `i18n.json` に由来しています。Microsoft Edge 互換性データは、Microsoft Corporation より供給され、Creative Commons Attribution 3.0 United States License の下で含まれています。


i18n.getMessage() - Mozilla

i18n.getMessage()
=================

指定したメッセージのローカライズされた文字列を取得します。

構文
--

```js
browser.i18n.getMessage(
  messageName, // 文字列
  substitutions, // 任意
);
```

### 引数

`messageName`

`文字列`。messages.json で指定されたメッセージ名です。messages.json 内にメッセージを見つけられない場合は:

* Firefox は "" を返し、エラーログを出力します。
* Chrome は "" を返し、エラーログを出力しません。

`substitutions`省略可

`文字列` または `文字列` の `配列`。単一の置換文字列、または置換文字列の配列です。
 Chrome では、9 個より多くの置換文字列を与えると、`getMessage()` は `undefined` を返します。

### 戻り値

`文字列`。現在のロケール向けにローカライズされたメッセージ。

ブラウザーの互換性
---------

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

例
-

`target.url` を置換文字列として渡し、`"messageContent"` のローカライズされた文字列を取得します:

```js
var message = browser.i18n.getMessage("messageContent", target.url);
console.log(message);
```

これは、\_locales/en/messages.json ファイルに含まれた次の内容で動作します:

```json
{
  "messageContent": {
    "message": "You clicked $URL$.",
    "description": "Tells the user which link they clicked.",
    "placeholders": {
      "url": {
        "content": "$1",
        "example": "https://developer.mozilla.org"
      }
    }
  }
}
```

`target.url` が "https://developer.mozilla.org" である場合、"en" ロケールでのメッセージの値は次のようになります:
```

"You clicked https://developer.mozilla.org."
```

### Example extensions

* menu-accesskey-visible
* menu-demo
* notify-link-clicks-i18n

**メモ:** この API は、Chromium の `chrome.i18n` API を基にしています。このドキュメンテーションは、Chromium コード内の `i18n.json` に由来しています。Microsoft Edge 互換性データは、Microsoft Corporation より供給され、Creative Commons Attribution 3.0 United States License の下で含まれています。


i18n.getUILanguage() - Mozilla

i18n.getUILanguage()
====================

ブラウザーの UI 言語を取得します。これは、優先されるユーザー言語を返す `i18n.getAcceptLanguages` とは異なります。

構文
--

```js
browser.i18n.getUILanguage();
```

### 引数

なし。

### 戻り値

`文字列`。`i18n.LanguageCode` によるブラウザーの UI 言語コード。

ブラウザーの互換性
---------

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

例
-

```js
var uiLanguage = browser.i18n.getUILanguage();
console.log(uiLanguage);

//e.g. "ja"
```

**メモ:** この API は、Chromium の `chrome.i18n` API を基にしています。このドキュメンテーションは、Chromium コード内の `i18n.json` に由来しています。Microsoft Edge 互換性データは、Microsoft Corporation より供給され、Creative Commons Attribution 3.0 United States License の下で含まれています。


i18n.LanguageCode - Mozilla

i18n.LanguageCode
=================

`"en-US"` や "`fr`" などの 言語タグ。

型
-

この型の値は文字列です。

ブラウザーの互換性
---------

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

**メモ:** この API は、Chromium の `chrome.i18n` API を基にしています。このドキュメンテーションは、Chromium コード内の `i18n.json` に由来しています。Microsoft Edge 互換性データは、Microsoft Corporation より供給され、Creative Commons Attribution 3.0 United States License の下で含まれています。


ロケール固有のメッセージ参照 - Mozilla

ロケール固有のメッセージ参照
==============

国際化対応 (i18n) した拡張機能は、ロケール固有のメッセージを提供する少なくとも 1 個の `messages.json` というファイルを持っています。このページでは、`messages.json` の書式を説明します。

**メモ:** **補足**: 拡張機能を国際化する方法についての情報は、i18n ガイドを参照してください。

messages.json example
---------------------

次のコードは、notify-link-clicks-i18n example 拡張機能から取られた `messages.json ファイル` の例示です。"*name*" と "message" のフィールドのみが必須です。

```json
{
  "extensionName": {
    "message": "Notify link clicks i18n",
    "description": "Name of the extension."
  },

  "extensionDescription": {
    "message": "ユーザーがリンクをクリックしたときに通知を表示します。",
    "description": "Description of the extension."
  },

  "notificationTitle": {
    "message": "クリック通知",
    "description": "Title of the click notification."
  },

  "notificationContent": {
    "message": "$URL$ をクリックしました。",
    "description": "Tells the user which link they clicked.",
    "placeholders": {
      "url": {
        "content": "$1",
        "example": "https://developer.mozilla.org"
      }
    }
  }
}
```

ファイルの配置
-------

`messages.json` ファイルは、サポートされたロケール名 (`en`, `de`, `ja` など) のディレクトリー内に置く必要があります。さらにこれらは、拡張機能のルートディレクトリ内の `_locales` と呼ばれるディレクトリー内に置く必要があります。

メンバーの詳細
-------

このセクションは、`messages.json` 内に記述される各メンバーについて説明します。

### name

各トップレベルのメンバーは、ローカライズするメッセージ文字列の name の後に名付けられます。例えば、上記の例の `"extensionName"` や `"notificationContent"` です。name は大文字と小文字が区別され、ローカライズされたメッセージテキストを受け取るためのキーとして振る舞います。

name には、次の文字が使用できます:

* A-Z
* a-z
* 0-9
* \_ (アンダースコア)
* @

**メモ:** @@ で始まる name を定義してはいけません。この名前は 事前定義されたメッセージ で予約されています。

### message

`"message"` メンバーは、placeholders を含むことのできるローカライズされた文字列を含みます。次のように使用します:

* *$placeholder\_name$* (大文字と小文字を区別) は、文字列に特定のプレースホルダー (例えば、上記の例の $URL$) を挿入します。
* `$1`, `$2`, `$3` 等は、`i18n.getMessage()` 呼び出し時に取得した値を文字列に直接挿入します。

他の注意すべき点:

* 文字列の前後に現れるいくつかのドル記号は、その個数から 1 を引いた数分のドル記号に置き換えられます。つまり、$$ は $ に、$$$ は $$ になります。
* ロケールファイルの読み込み時に、`/\$([a-z0-9_@]+)\$/i` と一致するトークンは、文字列の "置き換え" オブジェクトからの一致する値に置き換えられます。これらの置換は、メッセージ内の任意の `/\$\d/` トークンの処理よりも優先して行われます。
* ロケール文字列が使用される時に、`/\$\d+/` と一致するトークンは、`i18n.getMessage()` に渡される replacement に置き換えられます。
* `getMessage()` は、placeholder/substitution の呼び出しを 9 個までしか処理しません。
### description

省略可
`"description"` メンバーは、文字列に最適な訳語を作成する助けとなる情報を翻訳者に提供するために、メッセージ文字列の内容についての説明を含みます。

### placeholders

省略可
`"placeholders"` メンバーは、メッセージ内で使用されるいくつかのプレースホルダー補助文字列を定義します。これらは、翻訳してほしくないハードコードされたアイテムや変数を参照するアイテムに利用できます。

各プレースホルダー補助文字列の定義は、それ自身がいくつかの値を持っています:

```json
"url" : {
  "content" : "$1",
  "example" : "https://developer.mozilla.org"
}
```

#### プレースホルダー名

プレースホルダー名は、補助文字列内の placeholder を表すために使用します (`"url"` は `$url$` になります)。これは、大文字と小文字が区別され、メッセージ文字列と同じ文字が使用できます name。

#### content

"content" アイテムは、placeholder の内容を定義します。これは、"My placeholder" などハードコードされた文字列にすることができますが、`i18n.getMessage()` 呼び出しから取得した値も含められます。詳しい情報は、JavaScript からメッセージ文字列を取得する を参照してください。

#### example

省略可
任意の "example" アイテムは、プレースホルダーがエンドユーザーにどのように表示されるかの例を示すことによって翻訳者を助けるためのものです。これにより、翻訳者がファイルをローカライズするときに最適な選択ができるようになるでしょう。


history.HistoryItem - Mozilla

history.HistoryItem
===================

`HistoryItem` オブジェクトはブラウザー履歴でのページ情報を提供します。

型
-

これは下記のプロパティを持つオブジェクトです:

`id`

`string`。アイテムに固有の ID。

`url` 省略可

`string`。ページの URL。

`title` 省略可

`string`。ページのタイトル。

`lastVisitTime` 省略可

`number`。ページが最後に読み込まれた日付と時間で、epoch からのミリ秒で表現される。

`visitCount` 省略可

`number`。ユーザーがページを訪問した回数。

`typedCount` 省略可

`number`。ユーザーがアドレスをタイプしてページに移動したきた回数。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.history` API に基づいています。また、このドキュメントは `history.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


runtime.sendMessage() - Mozilla

runtime.sendMessage()
=====================

単一のメッセージを、自分や別の拡張機能が持つイベントリスナーに送信します。

自分自身の拡張機能に送信する場合は、引数 `extensionId` を省略してください。自らの拡張機能に含まれる全てのページで `runtime.onMessage` イベントが起動されます。ただし、`runtime.sendMessage` を実行したフレームは除きます。

別の拡張機能に送信する場合は、引数 `extensionId` に拡張機能の ID を設定してください。その拡張機能で `runtime.onMessageExternal` (en-US) イベントが起動されます。

このメソッドを使ってコンテンツスクリプトにメッセージを送信することはできません。コンテンツスクリプトにメッセージを送信するには、`tabs.sendMessage` (en-US) を使ってください。

これは、`Promise` を返す非同期関数です。

**メモ:** コネクションベースのメッセージを使うこともできます。

構文
--

```js
var sending = browser.runtime.sendMessage(
  extensionId, // optional string
  message, // any
  options, // optional object
);
```

### 引数

`extensionId`省略可

`string` 型。 メッセージを送信する拡張機能の ID。別の拡張機能にメッセージを送信する場合は、この引数を含めてください。受信させることを意図している拡張機能が manifest.json の applications キーを使って明示的に ID を設定されている場合は、その値を `extensionId` に指定する必要があります。そうでない場合、受信側の拡張機能のために生成された ID を指定する必要があります。
 もし `extensionId` が省略された場合、メッセージは自分自身の拡張機能に送信されます。

`message`

`any` 型。シリアライズされたクローンに構造化できるオブジェクト。

`options`省略可

`object` 型。

`includeTlsChannelId`省略可

`boolean` 型。接続イベントを待つプロセスのための `runtime.onMessageExternal` (en-US) に TLS チャンネル ID が渡されるかどうか。

`toProxyScript省略可`

`boolean` 型。 メッセージが `proxy` API を使って読み込まれる PAC ファイル向けである場合、true を指定しなければならない。

引数に指定される値によっては、この API はあいまいです。以降のルールが使われます。

* **引数が一つの場合**、それは送信されるメッセージで、内部的に送信されます。
* **引数が二つの場合**
    + 二番目の引数が次のいずれかである場合、引数は `(message, options)` と解釈され、メッセージは内部的に送信されます。
        1. 有効な `options` オブジェクトである (つまり、ブラウザがサポートする `options` のプロパティのみを持つオブジェクト)
        2. null
        3. undefined
    + それ以外の場合、引数は `(extensionId, message)` と解釈され、メッセージは `extensionId` によって識別された拡張機能に送信されます。
* **引数が三つの場合**、引数は `(extensionId, message, options)` と解釈されます。メッセージは `extensionId` によって識別された拡張機能に送信されます。

Firefox 55 より前では、引数が二つの場合のルールが異なることに注意してください。古いルールでは、最初の引数が文字列である場合、それを `extensionId` と扱い、二番目の引数をメッセージとして使います。これは、`sendMessage()` を `("my-message", {})` のような引数を使って実行する場合、空のメッセージを "my-message" によって識別される拡張機能に送信してしまうということです。新しいルールのもとでは、このような引数を使うと、"my-message" というメッセージを空のオプションオブジェクトを使って内部的に送信します。

### 戻り値

`Promise` 型。受信側が応答を送信する場合、その応答を JSON オブジェクトとして使って fulfilled 状態にされます。それ以外の場合、値を持たない fulfilled 状態になります。拡張機能との接続中にエラーが発生した場合、Promise はエラーメッセージを持つ rejected 状態になります。

ブラウザーの互換性
---------

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

使用例
---

これは、ユーザーがコンテンツのウィンドウをクリックしたときにバックグラウンド スクリプトにメッセージを送信するコンテンツスクリプトです。送信されるメッセージは `{greeting: "Greeting from the content script"}` で、送信側は応答を受信をすることになっており、それを `handleResponse` 関数で扱います。

```js
// content-script.js

function handleResponse(message) {
  console.log(`Message from the background script: ${message.response}`);
}

function handleError(error) {
  console.log(`Error: ${error}`);
}

function notifyBackgroundPage(e) {
  var sending = browser.runtime.sendMessage({
    greeting: "Greeting from the content script",
  });
  sending.then(handleResponse, handleError);
}

window.addEventListener("click", notifyBackgroundPage);
```

対応するバックグラウンド スクリプトは次のようなものです。

```js
// background-script.js

function handleMessage(request, sender, sendResponse) {
  console.log("Message from the content script: " + request.greeting);
  sendResponse({ response: "Response from background script" });
}

browser.runtime.onMessage.addListener(handleMessage);
```

### Example extensions

* content-script-register
* devtools-panels
* export-helpers
* find-across-tabs
* mocha-client-tests
* notify-link-clicks-i18n
* store-collected-images
* user-script-register
* webpack-modules

**メモ:** この API は Chromium の `chrome.runtime` API に基づいています。このドキュメントは `runtime.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


runtime.MessageSender - Mozilla

runtime.MessageSender
=====================

メッセージや接続要求の送信元に関する情報を持つオブジェクトです。このオブジェクトは、`runtime.onMessage()` リスナーに渡されます。

また、このオブジェクトは `runtime.Port` (en-US) のプロパティでもありますが、`runtime.onConnect()` (en-US) または `runtime.onConnectExternal()` (en-US) リスナーに渡された `Port` インスタンスにしか存在しません。

型
-

この型はオブジェクトです。以下のプロパティを持ちます。

`tab`省略可

`tabs.Tab` 型。接続を開いた `tabs.Tab` です。このプロパティが存在するのは、タブ (コンテンツスクリプトを含む) から接続が開かれたときだけです。

`frameId`省略可

`integer` 型。接続を開いたフレームです。0 は最上位のフレームを、正の数値は子フレームを表します。このプロパティが存在するのは、`tab` が設定されるときだけです。

`id`省略可

`string` 型。メッセージが拡張機能から送信された場合は、その拡張機能の ID が設定されます。送信側の manifest.json で applications キーを使って明示的に ID が設定されている場合は、`id` にはその値が使われます。そうでない場合は、送信側の自動生成された ID が使われます。
 バージョン 54 より前の Firefox では、この値には拡張機能の内部 ID が使われることに注意してください (つまり、拡張機能の URL に含まれる UUID です)。

`url`省略可

`string` 型。メッセージを送信したスクリプトを持つページやフレームの URL です。
 送信側が拡張機能のページ (例えば、バックグラウンド ページ、オプションページ、 ブラウザーアクション や ページアクション のポップアップ) に含まれるスクリプトである場合、URL は `"moz-extension://<拡張機能の内部 ID>/path/to/page.html"` という形式が使われます。送信側がバックグラウンドスクリプトであって、バックグラウンド ページを使っていない場合、URL は `"moz-extension://<拡張機能の内部 ID>/_generated_background_page.html"` という形式が使われます。
 送信側がウェブページ内のスクリプト (ページに含まれる通常のスクリプトだけでなく、コンテンツスクリプトも含みます) である場合、`url` はそのウェブページの URL が使われます。スクリプトがフレーム内で動作している場合、`url` はそのフレームの URL です。

`tlsChannelId`省略可

`string` 型。接続を開いたページまたはフレームの TLS チャンネルの ID です。拡張機能によって要求され、可能である場合にのみ設定されます。

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.runtime` API に基づいています。このドキュメントは `runtime.json` における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


runtime.onMessage - Mozilla

runtime.onMessage
=================

このイベントを使って、拡張機能の別の部品からのメッセージを受け取ることができます。

例えば、次のような場面で使います。

* **コンテンツスクリプトの中**で、 バックグラウンドスクリプトからのメッセージを受け取る。
* **バックグラウンドスクリプトの中**で、コンテンツスクリプトからのメッセージを受け取る。
* **オプションページやポップアップのスクリプトの中**で、バックグラウンドスクリプトからのメッセージを受け取る。
* **バックグラウンドスクリプトの中**で、オプションページやポップアップのスクリプトからのメッセージを受け取る。

`onMessage()` リスナーに受信させるメッセージを送るには、`runtime.sendMessage()`、または (コンテンツスクリプトにメッセージを送るときは) `tabs.sendMessage()` (en-US) を使います。

**メモ:** 同じ種類のメッセージに対する `onMessage` リスナーを複数作ることは避けてください。複数のリスナーが実行される順番は保証されていないからです。

特定のリスナーへのメッセージ伝送を保証したいときは、コネクションベースのメッセージを使ってください。

メッセージ本体の他に、リスナーは次のものを受け取ります。

* `sender` オブジェクト。メッセージ送信側の詳細情報です。
* `sendResponse` 関数。送信側への応答を送るために使います。

メッセージに対して同期的に応答するには、`sendResponse` 関数をリスナーの中で実行します。例を参照してください。

非同期的に応答するには、二つの方法があります。

* イベントリスナーから `true` を返す。こうすることで、リスナーから復帰した後でも `sendResponse` 関数が有効なままになるため、後で実行することができます。例を参照してください。
* イベントリスナーから `Promise` を返して、応答が準備できた後にそれを解決する (またはエラーの場合は拒否する)。例を参照してください。

**メモ:** また、コネクションベースのメッセージを使うこともできます。

構文
--

```js
browser.runtime.onMessage.addListener(listener)
browser.runtime.onMessage.removeListener(listener)
browser.runtime.onMessage.hasListener(listener)
```

イベントには 3 つの関数があります。

`addListener(listener)`

リスナーをこのイベントに追加する。

`removeListener(listener)`

このイベントの受け取りを中止する。`listener` 引数は削除するリスナーです。

`hasListener(listener)`

リスナーがこのイベントに登録されているかどうかを確認する。登録されている場合は `true` を、そうでない場合は `false` を返す。

addListener の構文
---------------

### 引数

`listener`

このイベントが発生したときに実行されるリスナー関数。関数には次の引数が渡される。

`message`

`object` 型。メッセージ本体。これは JSON 化できるオブジェクトです（データクローンアルゴリズムを参照）。

`sender`

`runtime.MessageSender` オブジェクト。メッセージの送信側を表します。

`sendResponse`

メッセージに対する応答を送るために、最大で一回実行できる関数。この関数は引数を一つ受け取り、それは JSON 化できるオブジェクトのはずです（データクローンアルゴリズムを参照）。その引数はメッセージ送信側に返送されます。

同じ文書中に `onMessage()` リスナーが 2 つ以上ある場合、応答を返すことができるのは 1 つだけです。

同期的に応答するには、リスナー関数が復帰する前に `sendResponse()` を実行してください。

非同期的に応答するには、次のどちらかを実行します。

* `sendResponse()` に対する参照を保持したままリスナー関数から `true` を返す。そうすると、リスナー関数から復帰した後でも `sendResponse()` が実行できます。
* リスナー関数から `Promise` を返して、応答の準備ができたときにその Promise を解決する。こちらがより好ましい方法です。

リスナー関数は、論理値または `Promise` のいずれかを返します。

**メモ:** `addListener()` に非同期関数を渡すと、リスナーはメッセージを受け取るたびにプロミスを返すため、他のリスナーが応答できないようになります。

```js
// このようにしないでください
browser.runtime.onMessage.addListener(async (data, sender) => {
  if (data.type === "handle\_me") {
    return "done";
  }
});
```

もし、リスナーが特定の種類のメッセージにのみ応答したい場合は、リスナーを非同期関数として定義し、リスナーが応答する予定のメッセージに対してのみプロミスを返す必要があります - そうでなければ、false または undefined を返してください。

```js
browser.runtime.onMessage.addListener((data, sender) => {
  if (data.type === "handle\_me") {
    return Promise.resolve("done");
  }
  return false;
});
```

ブラウザーの互換性
---------

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

例
-

### 単純な使用例

次のコンテンツスクリプトは、ウェブページ上のクリックイベントを待ち受けます。リンクがクリックされた場合、対象の URL をバックグラウンドページにメッセージ送信します。

```js
// content-script.js

window.addEventListener("click", notifyExtension);

function notifyExtension(e) {
  if (e.target.tagName !== "A") {
    return;
  }
  browser.runtime.sendMessage({ url: e.target.href });
}
```

バックグラウンドスクリプトはこのメッセージが送信されるまで待ち、 `notifications` API を使って通知を表示します。

```js
// background-script.js

browser.runtime.onMessage.addListener(notify);

function notify(message) {
  browser.notifications.create({
    type: "basic",
    iconUrl: browser.extension.getURL("link.png"),
    title: "リンクをクリックしました!",
    message: message.url,
  });
}
```

### 同期的な応答の送信

次のコンテンツスクリプトは、ユーザーがページ上をクリックしたとき、バックグラウンドスクリプトにメッセージを送信します。また、バックグラウンドスクリプトから送信された応答があればログ出力します。

```js
// content-script.js

function handleResponse(message) {
  console.log(`バックグラウンドスクリプトが応答しました: ${message.response}`);
}

function handleError(error) {
  console.log(`Error: ${error}`);
}

function sendMessage(e) {
  const sending = browser.runtime.sendMessage({
    content: "コンテンツスクリプトからのメッセージです",
  });
  sending.then(handleResponse, handleError);
}

window.addEventListener("click", sendMessage);
```

これが対応するバックグラウンドスクリプトで、リスナー内部から同期的に応答を返します。

```js
// background-script.js

function handleMessage(request, sender, sendResponse) {
  console.log(
    `コンテンツスクリプトがメッセージを送信しました: ${request.content}`,
  );
  sendResponse({ response: "バックグラウンドスクリプトからの応答です" });
}

browser.runtime.onMessage.addListener(handleMessage);
```

これは同期的に応答を返す別の方法で、Promise.resolve() を使うものです。

```js
// background-script.js

function handleMessage(request, sender, sendResponse) {
  console.log(
    `コンテンツスクリプトがメッセージを送信しました: ${request.content}`,
  );
  return Promise.resolve({
    response: "バックグラウンドスクリプトからの応答です",
  });
}

browser.runtime.onMessage.addListener(handleMessage);
```

### sendResponse を使用した非同期の応答の送信

次は直前の例のバックグラウンドスクリプトの別バージョンです。これは、リスナーが復帰した後、非同期的に応答を送ります。リスナーの中の `return true;` に注目してください。このようにすることで、リスナーが復帰した後に `sendResponse` 引数を使う意図があることをブラウザーに伝えています。

```js
// background-script.js

function handleMessage(request, sender, sendResponse) {
  console.log(
    `コンテンツスクリプトがメッセージを送信しました: ${request.content}`,
  );
  setTimeout(() => {
    sendResponse({
      response: "非同期的なバックグラウンドスクリプトからの応答です",
    });
  }, 1000);
  return true;
}

browser.runtime.onMessage.addListener(handleMessage);
```

### プロミスを使用した非同期の応答の送信

次のコンテンツスクリプトは、まずページ上の `<a>` リンクを取得し、そしてそのリンクの場所がブックマークされているかどうかを尋ねるメッセージを送信します。このスクリプトは、その場所がブックマークされている場合は `true` を、そうでない場合は `false` というような、論理型の応答が返ってくることを想定しています。

```js
// content-script.js

const firstLink = document.querySelector("a");

function handleResponse(isBookmarked) {
  if (isBookmarked) {
    firstLink.classList.add("bookmarked");
  }
}

browser.runtime
  .sendMessage({
    url: firstLink.href,
  })
  .then(handleResponse);
```

これが対応するバックグラウンドスクリプトです。``bookmarks.search()`` を使うことで、リンクがブックマークされているかを確認する `Promise` を返します。

```js
// background-script.js

function isBookmarked(message, sender, response) {
  return browser.bookmarks
    .search({
      url: message.url,
    })
    .then((results) => results.length > 0);
}

browser.runtime.onMessage.addListener(isBookmarked);
```

非同期的なハンドラーがプロミスを返さない場合、明示的にプロミスを作ることができます。これは少し不自然な例ですが、`setTimeout()` を使って 1 秒の遅延を発生させた後に応答を返します。

```js
// background-script.js

function handleMessage(request, sender, sendResponse) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        response: "非同期的なバックグラウンドスクリプトからの応答です",
      });
    }, 1000);
  });
}

browser.runtime.onMessage.addListener(handleMessage);
```

### Example extensions

* beastify
* content-script-register
* cookie-bg-picker
* devtools-panels
* export-helpers
* find-across-tabs
* imagify
* mocha-client-tests
* notify-link-clicks-i18n
* store-collected-images
* user-script-register
* webpack-modules

**メモ:** この API は Chromium の `chrome.runtime` API. このドキュメントは `runtime.json` における Chromium のコードに基づいています。


runtime.onInstalled - Mozilla

runtime.onInstalled
===================

拡張機能が最初にインストールされた時や、新しいバージョンへ更新された時、ブラウザーが新しいバージョンへ更新された時に発火します。

`runtime.onInstalled` は `management.onInstalled` (en-US) と同じではありません。`runtime.onInstalled` イベントはあなたの拡張機能でのみ発火されます。`browser.management.onInstalled` イベントは、どの拡張機能でも発火されます。

構文
--

```js
browser.runtime.onInstalled.addListener(listener)
browser.runtime.onInstalled.removeListener(listener)
browser.runtime.onInstalled.hasListener(listener)
```

イベントには 3 つの関数があります:

`addListener(callback)`

このイベントにリスナーを追加します。

`removeListener(listener)`

イベントリスナーを停止します。`listener` 引数は削除するリスナーです。

`hasListener(listener)`

`listener` がこのイベントに登録されているか確認します。登録されていば `true`、そうでない場合は `false` を返します。

addListener の構文
---------------

### 引数

`function`

イベントが起こったときに呼び出されるコールバック関数です。この関数には以下の引数が渡されます:

`details`

以下のプロパティを持つオブジェクトです:

`id` 省略可

`string` 型。更新されたモジュール共有中の拡張機能の ID です。`reason` の値が `shared_module_update` の時のみ設定されます。

`previousVersion` 省略可

`string` 型。更新前の拡張機能のバージョンです。`reason` の値が `update` の時のみ設定されます。

`reason`

`runtime.OnInstalledReason` (en-US) の値で、このイベントが発火した理由を表します。

`temporary`

`boolean` 型。拡張機能が一時的にインストールされた場合は True です。例えば、 Firefox で "about:debugging" ページ を使ったり、 web-ext run を使った場合です。それ以外の場合は False です。

ブラウザーの互換性
---------

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

例
-

拡張機能がインストールされた時に、理由をログ出力し、 https://example.com を開きます:

```js
function handleInstalled(details) {
  console.log(details.reason);
  browser.tabs.create({
    url: "https://example.com",
  });
}

browser.runtime.onInstalled.addListener(handleInstalled);
```

### Example extensions

* runtime-examples

**メモ:** この API は Chromium の `chrome.runtime` API に基づいています。また、このドキュメントは `runtime.json` における Chromium のコードに基づいています。


runtime.lastError - Mozilla

runtime.lastError
=================

この値は、コールバック関数のある非同期 API でエラーメッセージを伝える時に使われます。拡張機能のコールバックベースの API を使っている時に便利です。

プロミスベースの API を使っている時にはこのプロパティは必要ありません。代わりにプロミスへエラーハンドラーを渡してください。

```js
const gettingCookies = browser.cookies.getAll();
gettingCookies.then(onGot, onError);
```

`runtime.lastError` プロパティは、呼び出し元へ伝える必要のあるエラーを非同期関数が持っている時に設定されます。

`lastError` が設定されるかもしれない非同期関数を呼び出すなら、関数の結果を扱う時にエラーチェックが期待されます。 `lastError` が設定されてコールバック関数内でエラーチェックしなかった場合、エラーが発生します。

構文
--

```js
let myError = browser.runtime.lastError;  // null or Error object
```

### 値

エラーを表す `Error` オブジェクトです。 `message` プロパティは、人間が読めるエラーの説明の `string` です。`lastError` が無かったら、値は `null` になります。

例
-

Cookie を設定して、 Cookie の内容を出力するかエラーを伝えるコールバックを使う例です。

```js
function logCookie(c) {
  if (browser.runtime.lastError) {
    console.error(browser.runtime.lastError);
  } else {
    console.log(c);
  }
}

browser.cookies.set({ url: "https://developer.mozilla.org/" }, logCookie);
```

同じ処理内容ですが、 `setCookie()` の結果を扱うプロミスを使う例です。

```js
function logCookie(c) {
  console.log(c);
}

function logError(e) {
  console.error(e);
}

const setCookie = browser.cookies.set({
  url: "https://developer.mozilla.org/",
});

setCookie.then(logCookie, logError);
```

**メモ:** `runtime.lastError` は `extension.lastError` (en-US) のエイリアスです。 2 つはセットになっており、どちらかだけを確認すればよいです。

ブラウザーの互換性
---------

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

### Example extensions

* menu-demo

**メモ:** この API は Chromium の `chrome.runtime` API に基づいています。また、このドキュメントは `runtime.json` における Chromium から作成されています。


runtime.openOptionsPage() - Mozilla

runtime.openOptionsPage()
=========================

拡張機能にオプションページが定義されている場合、このメソッドはそれを開きます。

これは `Promise` を返す非同期関数です。

構文
--

```js
var openingPage = browser.runtime.openOptionsPage();
```

### パラメータ

なし。

### 返り値

オプションページの作成が成功した時は、引数のない `Promise` で、操作が失敗した場合はエラーメッセージつきの rejected が返ります。

ブラウザーの互換性
---------

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

例
-

ユーザーがブラウザーアクションのアイコンをクリックした時にオプションページを返します:

```js
function onOpened() {
  console.log(`Options page opened`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var opening = browser.runtime.openOptionsPage();
opening.then(onOpened, onError);
```

### Example extensions

* favourite-colour

**メモ:** This API is based on Chromium's `chrome.runtime` API. This documentation is derived from `runtime.json` in the Chromium code.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.


devtools.panels - Mozilla

devtools.panels
===============

**メモ:** この API は Chrome devtools APIs に基づいていますが、Firefox では実装されていない多くの機能があり、よってここに文書化されていません。現在欠けている機能を見るには、 Limitations of the devtools APIs を見てください。

`devtools.panels` API によって開発ツール拡張機能では開発ツールウィンドウ内のユーザーインターフェイスの定義ができます。

開発ツールウィンドウにはいくつもの個別のツールがあります - JavaScript デバッガー、ネットワークモニター、などが。最上位のタブの行でユーザーは色々なツールを切り替えられます。ツールの UI をホストするこのウィンドウは「パネル」と呼ばれます。

`devtools.panels` API にて開発ツールウィンドウ内の新規パネルを作成できます。

すべての `devtools` API と同様に、この API は manifest.json devtools\_page キー内に定義されたドキュメントや、拡張機能が作成するその他の開発ツールドキュメント(例えばパネル自身のドキュメント)の中だけでコードを利用できます。これ以上は 開発ツールを拡張するを見てください。

型
-

`devtools.panels.ElementsPanel`

ブラウザーの開発ツールの HTML/CSS インスペクターを表す

`devtools.panels.ExtensionPanel`

拡張機能によって作られた開発ツールパネルを表す

`devtools.panels.ExtensionSidebarPane`

ブラウザーの開発ツールの HTML/CSS インスペクターに、拡張機能が追加したペインを表す

プロパティ
-----

`devtools.panels.elements`

`ElementsPanel` オブジェクトの参照

`devtools.panels.themeName`

現在の開発ツールテーマの名前

関数
--

`devtools.panels.create()`

開発ツールを作成する

イベント
----

`devtools.panels.onThemeChanged`

開発ツールテーマが変更された時に発火する

ブラウザーの互換性
---------

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

Example extensions
------------------

* devtools-panels

**メモ:** この API は Chromium の `chrome.devtools.panels` API に基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


devtools.inspectedWindow - Mozilla

devtools.inspectedWindow
========================

**メモ:** このページは Firefox 54 に存在する WebExtensions devtools APIs を記述しています。この API は Chrome devtools APIs に基づいていますが、Firefox では実装されていない多くの機能があり、よってここに文書化されていません。現在欠けている機能を見るには、 Limitations of the devtools APIs を見てください。

`devtools.inspectedWindow` API によって開発ツール拡張機能では開発ツールが割当てられたウィンドウと相互作用できます。

すべての `devtools` API と同様に、この API は manifest.json devtools\_page キー内に定義されたドキュメントや、拡張機能が作成するその他の開発ツールドキュメント(例えば拡張機能が作ったパネル自身のドキュメント)の中だけでコードを利用できます。詳細は developer tools の拡張 を見てください。

プロパティ
-----

`devtools.inspectedWindow.tabId`

開発ツールが付属しているウィンドウの ID

Functions
---------

`devtools.inspectedWindow.eval()`

ターゲットウィンドウ内の JavaScript を評価する

`devtools.inspectedWindow.reload()`

ターゲットウィンドウのドキュメントを再読み込みする

ブラウザーの互換性
---------

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

Example extensions
------------------

* devtools-panels

**メモ:** この API は Chromium の `chrome.devtools.inspectedWindow` API に基づいています。また、このドキュメントは bookmarks.json における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


devtools.network - Mozilla

devtools.network
================

**メモ:** このページは Firefox 54 に存在する WebExtensions devtools APIs を記述しています。この API は Chrome devtools APIs に基づいていますが、Firefox では実装されていない多くの機能があり、よってここに文書化されていません。現在欠けている機能を見るには、 Limitations of the devtools APIs を見てください。

`devtools.network` API によって開発ツール拡張機能では開発ツールが付属しているウィンドウ(インスペクト対象ウィンドウ)に関連するネットワークリクエストの情報を取得できます。

すべての `devtools` API と同様に、この API は manifest.json devtools\_page キー内に定義されたドキュメントや、拡張機能が作成するその他の開発ツールドキュメント(例えば拡張機能が作ったパネル自身のドキュメント)の中だけでコードを利用できます。これ以上は 開発ツールを拡張するを見てください。

Events
------

`devtools.network.onNavigated`

ユーザーが新規ページのインスペクト対象ウィンドウに移動した時に発火します

ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.devtools.network` API に基づいています。また、このドキュメントは bookmarks.json における Chromium のコードに基づいています。Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


devtools.inspectedWindow.eval() - Mozilla

devtools.inspectedWindow.eval()
===============================

devtools が接続されているウィンドウで JavaScript を実行します。

これは `tabs.executeScript()` を使用してコンテンツスクリプトを添付することに似ていますが、主に 2 つの違いがあります。

第 1 に、JavaScript はブラウザが通常 devtools コンソール実装で提供する特別なコマンドのセットを使用できます。たとえば、"$0" を使用してインスペクタで現在選択されている要素を参照します。

次に、実行する JavaScript はページが読み込んだスクリプトによってページに加えられた変更を確認できます。これは、ページスクリプトが読み込まれなかった場合に存在するページを表示するコンテンツスクリプトとは対照的です。ただし、コンテンツスクリプトによって提供される分離は意図的なセキュリティ機能であり、DOM 関数とプロパティを再定義することにより、悪意のあるまたは単に非協力的な Web ページが WebExtensions API を混乱または破壊することを困難にすることを目的としています。つまり `eval()` を使用してこの保護を放棄する場合は非常に注意する必要があり、`eval()` を使用する必要がない限りコンテンツスクリプトを使用する必要があります。

スクリプトは、ページのメインフレームでデフォルトで評価されます。スクリプトは、JSON として表現できる値に評価する必要があります (たとえば、関数または関数を含むオブジェクトには評価されない可能性があることを意味します)。デフォルトでは、スクリプトはページに添付されたコンテンツスクリプトを表示しません。

"about:addons" などの特権ブラウザウィンドウで `eval()` を呼び出すことはできません。

オプションで `options` パラメータを指定できます。`options` パラメータには、異なるフレームまたは添付コンテンツスクリプトのコンテキストでスクリプトを評価するオプションが含まれます。Firefox はまだ `options` パラメータをサポートしていないことに注意してください。

`eval()` 関数は、スクリプトの評価結果またはエラーを解決する `Promise` を返します。

ヘルパー
----

The script gets access to a number of objects that help the injected script interact with the developer tools. The following helpers are currently supported:

`$0`

Contains a reference to the element that's currently selected in the devtools Inspector.

`inspect()`

Given an object, if it is an DOM element in the page, selects it in the devtools Inspector, otherwise it creates an object preview in the webconsole.

See some examples.

構文
--

```js
var evaluating = browser.devtools.inspectedWindow.eval(
  expression, // string
  options, // object
);
```

### 引数

`expression`

`string`. The JavaScript expression to evaluate. The string must evaluate to a object that can be represented as JSON, or an exception will be thrown. For example, `expression` must not evaluate to a function.

`options`省略可

`object`. Options for the function (Note that Firefox does not yet support this options), as follows:

`frameURL`省略可

`string`. The URL of the frame in which to evaluate the expression. If this is omitted, the expression is evaluated in the main frame of the window.

`useContentScriptContext`省略可

`boolean`. If `true`, evaluate the expression in the context of any content scripts that this extension has attached to the page. If you set this option, then you must have actually attached some content scripts to the page, or a Devtools error will be thrown.

`contextSecurityOrigin` 省略可

`string`. Evaluate the expression in the context of a content script attached by a different extension, whose origin matches the value given here. This overrides `useContentScriptContext`.

### 返値

A `Promise` that will be fulfilled with an `array` containing two elements.

If no error occurred, element 0 will contain the result of evaluating the expression, and element 1 will be `undefined`.

If an error occurred, element 0 will be `undefined`, and element 1 will contain an object giving details about the error. Two different sorts of errors are distinguished:

* errors encountered evaluating the JavaScript (for example, syntax errors in the expression). In this case, element 1 will contain:
    + a boolean property `isException`, set to `true`
    + a string property `value`, giving more details.
* other errors (for example, an expression that evaluates to an object that can't be represented as JSON). In this case, element 1 will contain:
    + a boolean property `isError`, set to `true`
    + a string property `code` containing an error code.
ブラウザの対応状況
---------

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

例
-

This tests whether jQuery is defined in the inspected window, and logs the result. Note that this wouldn't work in a content script, because even if jQuery were defined, the content script would not see it.

```js
function handleError(error) {
  if (error.isError) {
    console.log(`Devtools error: ${error.code}`);
  } else {
    console.log(`JavaScript error: ${error.value}`);
  }
}

function handleResult(result) {
  console.log(result);
  if (result[0] !== undefined) {
    console.log(`jQuery: ${result[0]}`);
  } else if (result[1]) {
    handleError(result[1]);
  }
}

const checkjQuery = "typeof jQuery != 'undefined'";

evalButton.addEventListener("click", () => {
  browser.devtools.inspectedWindow.eval(checkjQuery).then(handleResult);
});
```

### Helper examples

This uses the `$0` helper to set the background color of the element that's currently selected in the Inspector:

```js
const evalButton = document.querySelector("#reddinate");
const evalString = "$0.style.backgroundColor = 'red'";

function handleError(error) {
  if (error.isError) {
    console.log(`Devtools error: ${error.code}`);
  } else {
    console.log(`JavaScript error: ${error.value}`);
  }
}

function handleResult(result) {
  if (result[1]) {
    handleError(result[1]);
  }
}

evalButton.addEventListener("click", () => {
  browser.devtools.inspectedWindow.eval(evalString).then(handleResult);
});
```

This uses the `inspect()` helper to select the first <h1> element in the page:

```js
const inspectButton = document.querySelector("#inspect");
const inspectString = "inspect(document.querySelector('h1'))";

function handleError(error) {
  if (error.isError) {
    console.log(`Devtools error: ${error.code}`);
  } else {
    console.log(`JavaScript error: ${error.value}`);
  }
}

function handleResult(result) {
  if (result[1]) {
    handleError(result[1]);
  }
}

inspectButton.addEventListener("click", () => {
  browser.devtools.inspectedWindow.eval(inspectString).then(handleResult);
});
```

**メモ:** This API is based on Chromium's `chrome.devtools` API.Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.


devtools.inspectedWindow.tabId - Mozilla

devtools.inspectedWindow.tabId
==============================

devtools のこのインスタンスがアタッチされる `tab` の ID。番号で表されます。

これは拡張機能のバックグラウンドページに送信できるため、バックグラウンドページは `tabs` API を使用してタブと対話できます:

```js
// devtools-panel.js

const scriptToAttach = "document.body.innerHTML = 'Hi from the devtools';";

attachContentScriptButton.addEventListener("click", () => {
  browser.runtime.sendMessage({
    tabId: browser.devtools.inspectedWindow.tabId,
    script: scriptToAttach,
  });
});
```

```js
// background.js

function handleMessage(request, sender, sendResponse) {
  browser.tabs.executeScript(request.tabId, {
    code: request.script,
  });
}

browser.runtime.onMessage.addListener(handleMessage);
```

ブラウザの対応状況
---------

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

**メモ:** この API は Chromium の `chrome.devtools` API に基づいています。Microsoft Edge の互換性データは Microsoft Corporation によって提供され、Creative Commons Attribution 3.0 United States License に含まれています。


tabs.duplicate() - Mozilla

tabs.duplicate()
================

ID で指定されたタブを複製します。

この関数は `Promise` を返す非同期関数です。

構文
--

```js
var duplicating = browser.tabs.duplicate(
  tabId, // integer
);
```

### パラメータ

`tabId`

`integer`. 複製するタブの ID を指定します。

### 戻り値

A `Promise` that will be fulfilled with a `tabs.Tab` object containing details about the duplicated tab. The `Tab` object only contains `url`, `title` and `favIconUrl` if the extension has the `"tabs"` permission. If any error occurs the promise will be rejected with an error message.

ブラウザーの互換性
---------

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

例
-

１つ目のタブを複製し、新しく作られたタブの ID をログに残す例：

```js
function onDuplicated(tabInfo) {
  console.log(tabInfo.id);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

// Duplicate the first tab in the array
function duplicateFirstTab(tabs) {
  console.log(tabs);
  if (tabs.length > 0) {
    var duplicating = browser.tabs.duplicate(tabs[0].id);
    duplicating.then(onDuplicated, onError);
  }
}

// Query for all open tabs
var querying = browser.tabs.query({});
querying.then(duplicateFirstTab, onError);
```

### Example extensions

* tabs-tabs-tabs

**メモ:** この API は Chromiums の `chrome.tabs` API に基づいています。 This documentation is derived from `tabs.json` in the Chromium code.Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。


tabs.executeScript() - Mozilla

tabs.executeScript()
====================

JavaScript のコードをページに挿入します。

コードを挿入できるページの URL は、マッチパターン により指定できます。 つまり、URL の scheme 部は、"http", "https", "file", "ftp" のいずれかでなければなりません。そして、その URL に対する明示的な host パーミッション、または activeTab パーミッションが必要です。

また、自らの拡張機能パッケージに含まれるページに対してであれば、次の方法でコードを挿入することも可能です。

```js
browser.tabs.create({ url: "/my-page.html" }).then(() => {
  browser.tabs.executeScript({
    code: `console.log('location:', window.location.href);`,
  });
});
```

この場合、特別なパーミッションは必要ありません。

ブラウザーの組込ページ、例えば about:debugging、about:addons、新規タブを開いた時のページなどには、コードを挿入することは*できません*。

挿入するスクリプトのことを、コンテンツスクリプトと呼びます。詳細は コンテンツスクリプト で学んでください。

これは、`Promise` を返す非同期関数です。

構文
--

```js
var executing = browser.tabs.executeScript(
  tabId, // optional integer
  details, // object
);
```

### 引数

`tabId` 省略可

`integer` 型。 スクリプトを実行するタブの ID。省略時のデフォルトは、現在のウィンドウでアクティブなタブ。

`details`

実行するスクリプトに関するオブジェクト。次のプロパティを持ちます。

`allFrames` 省略可

`boolean` 型。`true` である場合は、現在のページが持つ全てのフレームにコードが挿入されます。`true` であり、かつ `frameId` が設定されている場合はエラーが発生するため、frameId と allFrames は互いに排他的です。`false` である場合は、最上位のフレームにのみコードが挿入されます。デフォルトは `false` です。

`code` 省略可

`string` 型。挿入されるコードを文字列として表現したもの。**注意:** このプロパティを使って信頼できないデータを JavaScript に挿入しないでください。セキュリティの問題につながります。

`file` 省略可

`string` 型。挿入されるコードを持つファイルへのパス。Firefox では、拡張機能のルートから始まらない相対 URL は、現在のページの URL からの相対位置として解決されます。Chrome では、そのような URL は拡張機能のベース URL からの相対位置として解決されます。複数のブラウザーで動作させるには、拡張機能のルートから始まる相対 URL として指定します。例えば、`"/path/to/script.js"` のようにします。

`frameId` 省略可

`integer` 型。コードが挿入されるフレーム。デフォルトは `0` (最上位のフレーム) です。

`matchAboutBlank` 省略可

`boolean` 型。`true` である場合、コードはその親ドキュメントへのアクセスをもつときに、組込の "about:blank" や "about:srcdoc" フレームにも挿入されます。コードをトップレベルの about: フレームに挿入することはできません。デフォルトは `false` です。

`runAt` 省略可

`extensionTypes.RunAt` 型。コードがどの時点でタブに挿入されるかを指定します。デフォルトは "document\_idle" です。

### 戻り値

オブジェクト配列を使って fulfilled 状態にされる `Promise` です。それぞれのオブジェクトは、フレームに挿入されたスクリプトの結果を表します。

スクリプトの結果とは最後に評価された文のことです。これは、Web コンソールで実行されたスクリプトの出力 (結果であって、`console.log()` の出力のことではありません) に似ています。例えば、次のようなスクリプトを挿入したとします。

```js
var foo = "my result";
foo;
```

この場合、結果配列には、文字列 "`my result`" が含まれます。結果は、構造化複製が可能でなければなりません。最後の文を `Promise` にすることもできますが、webextension-polyfill ライブラリではサポートされていません。

エラーが発生した場合、Promise はエラーメッセージを使って rejected 状態にされます。

使用例
---

次の例は、現在アクティブなタブで 1 行のコードスニペットを実行します。

```js
function onExecuted(result) {
  console.log(`グリーンにしました`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var makeItGreen = 'document.body.style.border = "5px solid green"';

var executing = browser.tabs.executeScript({
  code: makeItGreen,
});
executing.then(onExecuted, onError);
```

次の例は、ファイルからスクリプトを実行します。このファイルは拡張機能のパッケージに含まれており、"content-script.js" という名前です。そのスクリプトは、現在アクティブなタブで実行されますが、メインのドキュメントだけでなく、全てのサブフレームでも実行されます。

```js
function onExecuted(result) {
  console.log(`全てのサブフレームで実行しました`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var executing = browser.tabs.executeScript({
  file: "/content-script.js",
  allFrames: true,
});
executing.then(onExecuted, onError);
```

次の例は、ファイルからスクリプトを実行します。このファイルは拡張機能のパッケージに含まれており、"content-script.js" という名前です。そのスクリプトは、ID が 2 であるタブで実行されます。

```js
function onExecuted(result) {
  console.log(`タブ 2 で実行しました`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var executing = browser.tabs.executeScript(2, {
  file: "/content-script.js",
});
executing.then(onExecuted, onError);
```

### Example extensions

* beastify
* context-menu-copy-link-with-types
* devtools-panels
* imagify
* menu-demo
* menu-remove-element
ブラウザーの互換性
---------

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

**メモ:** この API は Chromium の `chrome.tabs` API に基づいています。このドキュメントは `tabs.json` における Chromium のコードに基づいています。


tabs.remove() - Mozilla

tabs.remove()
=============

１つ以上のタブを閉じます。

この関数は `Promise` を返す非同期関数です。

構文
--

```js
var removing = browser.tabs.remove(
  tabIds, // integer or integer array
);
```

### パラメータ

`tabIds`

`integer` または `array of integer`. 閉じるタブの ID を指定します。

### 戻り値

A `Promise` that will be fulfilled with no arguments when all the specified tabs have been removed or their `beforeunload` prompts have been handled. If any error occurs, the promise will be rejected with an error message.

ブラウザーの互換性
---------

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

例
-

タブを１つだけ閉じる場合：

```js
function onRemoved() {
  console.log(`Removed`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var removing = browser.tabs.remove(2);
removing.then(onRemoved, onError);
```

複数のタブを閉じる場合：

```js
function onRemoved() {
  console.log(`Removed`);
}

function onError(error) {
  console.log(`Error: ${error}`);
}

var removing = browser.tabs.remove([15, 14, 1]);
removing.then(onRemoved, onError);
```

### Example extensions

* contextual-identities
* tabs-tabs-tabs

**メモ:** この API は Chromium の `chrome.tabs` API に基づいています。 This documentation is derived from `tabs.json` in the Chromium code.Microsoft Edge での実装状況は Microsoft Corporation から提供されたものであり、ここでは Creative Commons Attribution 3.0 United States License に従っています。