aboutsummaryrefslogtreecommitdiff
path: root/files/fa/mozilla/add-ons/webextensions/api/runtime
diff options
context:
space:
mode:
Diffstat (limited to 'files/fa/mozilla/add-ons/webextensions/api/runtime')
-rw-r--r--files/fa/mozilla/add-ons/webextensions/api/runtime/index.html168
-rw-r--r--files/fa/mozilla/add-ons/webextensions/api/runtime/onmessage/index.html317
2 files changed, 0 insertions, 485 deletions
diff --git a/files/fa/mozilla/add-ons/webextensions/api/runtime/index.html b/files/fa/mozilla/add-ons/webextensions/api/runtime/index.html
deleted file mode 100644
index 62478e3457..0000000000
--- a/files/fa/mozilla/add-ons/webextensions/api/runtime/index.html
+++ /dev/null
@@ -1,168 +0,0 @@
----
-title: runtime
-slug: Mozilla/Add-ons/WebExtensions/API/runtime
-tags:
- - API
- - Add-ons
- - Extensions
- - Interface
- - NeedsTranslation
- - Reference
- - TopicStub
- - WebExtensions
- - runtime
-translation_of: Mozilla/Add-ons/WebExtensions/API/runtime
----
-<div>{{AddonSidebar}}</div>
-
-<p><span class="seoSummary">This module provides information about your extension and the environment it's running in.</span></p>
-
-<p>It also provides messaging APIs enabling you to:</p>
-
-<ul>
- <li>Communicate between different parts of your extension. For advice on choosing between the messaging options, see <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Choosing_between_one-off_messages_and_connection-based_messaging">Choosing between one-off messages and connection-based messaging</a>.</li>
- <li>Communicate with other extensions.</li>
- <li>Communicate with native applications.</li>
-</ul>
-
-<h2 id="Types">Types</h2>
-
-<dl>
- <dt>{{WebExtAPIRef("runtime.Port")}}</dt>
- <dd>Represents one end of a connection between two specific contexts, which can be used to exchange messages.</dd>
- <dt>{{WebExtAPIRef("runtime.MessageSender")}}</dt>
- <dd>
- <p>Contains information about the sender of a message or connection request.</p>
- </dd>
- <dt>{{WebExtAPIRef("runtime.PlatformOs")}}</dt>
- <dd>Identifies the browser's operating system.</dd>
- <dt>{{WebExtAPIRef("runtime.PlatformArch")}}</dt>
- <dd>Identifies the browser's processor architecture.</dd>
- <dt>{{WebExtAPIRef("runtime.PlatformInfo")}}</dt>
- <dd>Contains information about the platform the browser is running on.</dd>
- <dt>{{WebExtAPIRef("runtime.RequestUpdateCheckStatus")}}</dt>
- <dd>Result of a call to {{WebExtAPIRef("runtime.requestUpdateCheck()")}}.</dd>
- <dt>{{WebExtAPIRef("runtime.OnInstalledReason")}}</dt>
- <dd>The reason that the {{WebExtAPIRef("runtime.onInstalled")}} event is being dispatched.</dd>
- <dt>{{WebExtAPIRef("runtime.OnRestartRequiredReason")}}</dt>
- <dd>The reason that the {{WebExtAPIRef("runtime.onRestartRequired")}} event is being dispatched.</dd>
-</dl>
-
-<h2 id="Properties">Properties</h2>
-
-<dl>
- <dt>{{WebExtAPIRef("runtime.lastError")}}</dt>
- <dd>This value is set when an asynchronous function has an error condition that it needs to report to its caller.</dd>
- <dt>{{WebExtAPIRef("runtime.id")}}</dt>
- <dd>The ID of the extension.</dd>
-</dl>
-
-<h2 id="Functions">Functions</h2>
-
-<dl>
- <dt>{{WebExtAPIRef("runtime.getBackgroundPage()")}}</dt>
- <dd>Retrieves the <a href="/en-US/docs/Web/API/Window">Window</a> object for the background page running inside the current extension.</dd>
- <dt>{{WebExtAPIRef("runtime.openOptionsPage()")}}</dt>
- <dd>
- <p>Opens your extension's <a href="/en-US/Add-ons/WebExtensions/user_interface/Options_pages">options page</a>.</p>
- </dd>
- <dt>{{WebExtAPIRef("runtime.getManifest()")}}</dt>
- <dd>Gets the complete <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a> file, serialized as an object.</dd>
- <dt>{{WebExtAPIRef("runtime.getURL()")}}</dt>
- <dd>Given a relative path from the <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json">manifest.json</a> to a resource packaged with the extension, returns a fully-qualified URL.</dd>
- <dt>{{WebExtAPIRef("runtime.setUninstallURL()")}}</dt>
- <dd>Sets a URL to be visited when the extension is uninstalled.</dd>
- <dt>{{WebExtAPIRef("runtime.reload()")}}</dt>
- <dd>Reloads the extension.</dd>
- <dt>{{WebExtAPIRef("runtime.requestUpdateCheck()")}}</dt>
- <dd>Checks for updates to this extension.</dd>
- <dt>{{WebExtAPIRef("runtime.connect()")}}</dt>
- <dd>Establishes a connection from a content script to the main extension process, or from one extension to a different extension.</dd>
- <dt>{{WebExtAPIRef("runtime.connectNative()")}}</dt>
- <dd>
- <div>Connects the extension to a native application on the user's computer.</div>
- </dd>
- <dt>{{WebExtAPIRef("runtime.sendMessage()")}}</dt>
- <dd>Sends a single message to event listeners within your extension or a different extension. Similar to {{WebExtAPIRef('runtime.connect')}} but only sends a single message, with an optional response.</dd>
- <dt>{{WebExtAPIRef("runtime.sendNativeMessage()")}}</dt>
- <dd>Sends a single message from an extension to a native application.</dd>
- <dt>{{WebExtAPIRef("runtime.getPlatformInfo()")}}</dt>
- <dd>Returns information about the current platform.</dd>
- <dt>{{WebExtAPIRef("runtime.getBrowserInfo()")}}</dt>
- <dd>Returns information about the browser in which this extension is installed.</dd>
- <dt>{{WebExtAPIRef("runtime.getPackageDirectoryEntry()")}}</dt>
- <dd>Returns a DirectoryEntry for the package directory.</dd>
-</dl>
-
-<h2 id="Events">Events</h2>
-
-<dl>
- <dt>{{WebExtAPIRef("runtime.onStartup")}}</dt>
- <dd>Fired when a profile that has this extension installed first starts up. This event is not fired when an incognito profile is started.</dd>
- <dt>{{WebExtAPIRef("runtime.onInstalled")}}</dt>
- <dd>Fired when the extension is first installed, when the extension is updated to a new version, and when the browser is updated to a new version.</dd>
- <dt>{{WebExtAPIRef("runtime.onSuspend")}}</dt>
- <dd>Sent to the event page just before the extension is unloaded. This gives the extension an opportunity to do some cleanup.</dd>
- <dt>{{WebExtAPIRef("runtime.onSuspendCanceled")}}</dt>
- <dd>Sent after {{WebExtAPIRef("runtime.onSuspend")}} to indicate that the extension won't be unloaded after all.</dd>
- <dt>{{WebExtAPIRef("runtime.onUpdateAvailable")}}</dt>
- <dd>Fired when an update is available, but isn't installed immediately because the extension is currently running.</dd>
- <dt>{{WebExtAPIRef("runtime.onBrowserUpdateAvailable")}} {{deprecated_inline}}</dt>
- <dd>Fired when an update for the browser is available, but isn't installed immediately because a browser restart is required.</dd>
- <dt>{{WebExtAPIRef("runtime.onConnect")}}</dt>
- <dd>Fired when a connection is made with either an extension process or a content script.</dd>
- <dt>{{WebExtAPIRef("runtime.onConnectExternal")}}</dt>
- <dd>Fired when a connection is made with another extension.</dd>
- <dt>{{WebExtAPIRef("runtime.onMessage")}}</dt>
- <dd>Fired when a message is sent from either an extension process or a content script.</dd>
- <dt>{{WebExtAPIRef("runtime.onMessageExternal")}}</dt>
- <dd>Fired when a message is sent from another extension. Cannot be used in a content script.</dd>
- <dt>{{WebExtAPIRef("runtime.onRestartRequired")}}</dt>
- <dd>Fired when the device needs to be restarted.</dd>
-</dl>
-
-<h2 id="Browser_compatibility">Browser compatibility</h2>
-
-
-
-<p>{{Compat("webextensions.api.runtime")}}</p>
-
-<div>{{WebExtExamples("h2")}}</div>
-
-<div class="note"><strong>Acknowledgements</strong>
-
-<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/runtime"><code>chrome.runtime</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/extensions/common/api/runtime.json"><code>runtime.json</code></a> in the Chromium code.</p>
-
-<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
-</div>
-
-<div class="hidden">
-<pre>// Copyright 2015 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
-</div>
diff --git a/files/fa/mozilla/add-ons/webextensions/api/runtime/onmessage/index.html b/files/fa/mozilla/add-ons/webextensions/api/runtime/onmessage/index.html
deleted file mode 100644
index f58f2a5f8c..0000000000
--- a/files/fa/mozilla/add-ons/webextensions/api/runtime/onmessage/index.html
+++ /dev/null
@@ -1,317 +0,0 @@
----
-title: runtime.onMessage
-slug: Mozilla/Add-ons/WebExtensions/API/runtime/onMessage
-translation_of: Mozilla/Add-ons/WebExtensions/API/runtime/onMessage
----
-<nav>
-<p>{{AddonSidebar()}}</p>
-
-<p>از این رویداد برای گوش دادن به پیام های بخش دیگری از افزونه خود استفاده کنید.</p>
-</nav>
-
-<p>برخی از موارد مورد استفاده برای مثال:</p>
-
-<ul>
- <li>در یک content script ، برای گوش دادن به پیام های background script.</li>
- <li>در یک background script ، برای گوش دادن به پیام های content script</li>
- <li><strong>در یک صفحه <a href="/en-US/Add-ons/WebExtensions/Anatomy_of_a_WebExtension#Options_pages">options page</a> یا <a href="/en-US/Add-ons/WebExtensions/User_interface_components#Popups">popup</a> script</strong>, برای گوش دادن به پیام هایbackground script.</li>
- <li><strong>در یک background script</strong>, برای گوش دادن به پیام های options page یا popup script.</li>
-</ul>
-
-<p>برای ارسال پیام که توسط <code>onMessage()</code> listener, از {{WebExtAPIRef("runtime.sendMessage()")}} یا (برای ارسال پیام به یک content script) {{WebExtAPIRef("tabs.sendMessage()")}}.</p>
-
-<div class="blockIndicator note">
-<p>از ایجاد چندین  <code>onMessage()</code> listeners برای همان نوع پیام خودداری کنید, زیرا نظم چندین listeners will fire تضمین نمی شود.</p>
-
-<p>اگر می خواهید تحویل پیام به یک نقطه پایان خاص را تضمین کنید, از روش <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Connection-based_messaging">مبتنی بر اتصال برای پیام استفاده کنید</a>.</p>
-</div>
-
-<p>همراه با message خود, به listener منتقل می شود:</p>
-
-<ul>
- <li>یک شیء <code>فرستنده</code> که جزئیاتی درباره فرستنده پیام می دهد.</li>
- <li>یک تابع <code>()sendResponse</code> که می تواند برای ارسال پاسخ به فرستنده استفاده شود.</li>
-</ul>
-
-<p>شما می توانید با فراخوانی تابع <code>()sendResponse</code> در listener خود. <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onMessage#Sending_a_synchronous_response">مثالی را ببینید</a>.</p>
-
-<p>برای ارسال  response ناهمزمان, دو گزینه وجود دارد:</p>
-
-<ul>
- <li>رویداد listener را  <code>true</code> برگردانید. این کار باعث می شود تابع <code>()sendResponse</code> پس از بازگشت listener معتبر باشد, بنابراین میتوانید بعدأ آن را صدا بزنید. <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onMessage#Sending_an_asynchronous_response_using_sendResponse">مثالی را ببینید</a>.</li>
- <li>return a <code>Promise</code> from the event listener, and resolve when you have the response (or reject it in case of an error). <a href="https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/runtime/onMessage#Sending_an_asynchronous_response_using_a_Promise">See an example</a>.</li>
-</ul>
-
-<div class="warning">
-<p>بازگشت یک <code>Promise</code> در حال حاضر ترجیح داده می شود, زیرا <code>sendResponse()</code> <a href="https://github.com/mozilla/webextension-polyfill/issues/16#issuecomment-296693219">از مشخصات W3C حذف می شود</a>.</p>
-
-<p>کتابخانه محبوب <a href="https://github.com/mozilla/webextension-polyfill">webextension-polyfill</a> قبلا تابع <code>()sendResponse</code> را از اجزای آن حذف کرده است.</p>
-</div>
-
-<div class="blockIndicator note">
-<p>شما همچنین می توانید از یک روش <a href="/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#Connection-based_messaging">مبتنی بر اتصال برای تبادل پیام استفاده کنید</a>.</p>
-</div>
-
-<h2 id="Syntax">Syntax</h2>
-
-<pre class="syntaxbox brush:js">browser.runtime.onMessage.addListener(<var>listener</var>)
-browser.runtime.onMessage.removeListener(<var>listener</var>)
-browser.runtime.onMessage.hasListener(<var>listener</var>)
-</pre>
-
-<p>رویکردها سه تابع دارند:</p>
-
-<dl>
- <dt><code>addListener(<var>listener</var>)</code></dt>
- <dd>به این رویداد یک listener اضلفه می کند.</dd>
- <dt><code>removeListener(<var>listener</var>)</code></dt>
- <dd>listening به این رویداد را متوقف می کند. یک <code><var>listener</var></code> دلیلی است برای حذف listener.</dd>
- <dt><code>hasListener(<var>listener</var>)</code></dt>
- <dd>بررسی می کند که حداقل یک listener برای این رویداد ثبت شده باشد. اگر listening وجود داشت <code>true</code> برمیگرداند, در غیر این صورت <code>false</code> را بر میگرداند.</dd>
-</dl>
-
-<h2 id="addListener_syntax">addListener syntax</h2>
-
-<h3 id="پارامترها">پارامترها</h3>
-
-<dl>
- <dt><code><var>listener</var></code></dt>
- <dd>
- <p>یک تابع برگشتی که هنگام وقوع این رویداد فراخوانی می شود. به دلایل زیر این تابع پاس داده می شود:</p>
-
- <dl class="reference-values">
- <dt><code><var>message</var></code></dt>
- <dd><code>object</code>. خود پیام است. این یک شیء با قابلیت JSON-ifiable است.</dd>
- <dt><code><var>sender</var></code></dt>
- <dd>یک {{WebExtAPIRef('runtime.MessageSender')}} شیء به نمایندگی از فرستنده پیام.</dd>
- <dt><code><var>sendResponse</var></code></dt>
- <dd>
- <p>یک تابع برای صدا زدن, حداکثر یک بار, برای ارسال پاسخ به <code><var>پیام</var></code>. این تابع یک آرگومان واحد را شامل می شود, که ممکن است هر شیء با قابلیت JSON باشد. این آرگومان به فرستنده پیام ارسال می شود.</p>
-
- <p>اگر بیش از یک شنونده  <code>onMessage()</code> در همان سند دارید, پس فقط ممکن است یک نفر پاسخی ارسال کند.</p>
-
- <p>برای ارسال پاسخ همزمان, قبل از بازگشت تابع listener با  <code>sendResponse()</code> تماس بگیرید.</p>
-
- <p>برای ارسال پاسخ به صورت ناهمزمان:</p>
-
- <ul>
- <li>یا یک رفرنس برای آرگومان <code>()sendResponse</code> نگه دارید و  مقدار <code>true</code> را برای تابع listener برگردانید. شما می توانید پس از بازگشت تابع listener، با  <code>()sendResponse</code> تماس بگیرید.</li>
- <li>یا یک {{jsxref("Promise")}} را از تابع listener برگردانید و  promise  را در صورت آماده بودن پاسخ حل کنید.  این یک روش ترجیحی است.</li>
- </ul>
- </dd>
- </dl>
-
- <p>تابع  <code><var>listener</var></code> می تواند مقدار Boolean یا  {{jsxref("Promise")}} را برگرداند.</p>
-
- <div class="blockIndicator note">
- <p><strong>مهم:</strong> با استفاده از تابع <code>async</code>  با  <code>()addListener</code> تماس نگیرید:</p>
-
- <pre class="brush: js example-bad">// don't do this
-browser.runtime.onMessage.addListener(
-  async (data, sender) =&gt; {
- if (data.type === 'handle_me') { return 'done'; }
- }
-);
-</pre>
-
- <p>این امر باعث می شود شنونده هر پیامی را که دریافت می کند, به طور موثر همه شنوندگان دیگر را از دریافت و پردازش پیام مسدود می کند.</p>
-
- <p>اگر می خواهید رویکردی ناهمزمان داشته باشید, به جای این کار از یک  Promise استفاده کنید, مانند مثال زیر:</p>
-
- <pre class="brush: js example-good">browser.runtime.onMessage.addListener(
-  (data, sender) =&gt; {
- if (data.type === 'handle_me') {
-  return Promise.resolve('done');
-  }
- }
-);
-</pre>
- </div>
- </dd>
-</dl>
-
-<h2 id="سازگاری_مرورگر">سازگاری مرورگر</h2>
-
-<p class="hidden">The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
-
-<p>{{Compat("webextensions.api.runtime.onMessage()")}}</p>
-
-<h2 id="Examples">Examples</h2>
-
-<h3 id="Simple_example">Simple example</h3>
-
-<p>This content script listens for click events on the web page. If the click was on a link, it messages the background page with the target URL:</p>
-
-<pre class="brush: js">// content-script.js
-
-window.addEventListener("click", notifyExtension);
-
-function notifyExtension(e) {
- if (e.target.tagName != "A") {
- return;
- }
- browser.runtime.sendMessage({"url": e.target.href});
-}
-</pre>
-
-<p>The background script listens for these messages and displays a notification using the <code><a href="https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/notifications">notifications</a></code> API:</p>
-
-<pre class="brush: js">// background-script.js
-
-browser.runtime.onMessage.addListener(notify);
-
-function notify(message) {
- browser.notifications.create({
- "type": "basic",
- "iconUrl": browser.extension.getURL("link.png"),
- "title": "You clicked a link!",
- "message": message.url
- });
-}
-</pre>
-
-<h3 id="Sending_a_synchronous_response">Sending a synchronous response</h3>
-
-<p>This content script sends a message to the background script when the user clicks on the page. It also logs any response sent by the background script:</p>
-
-<pre class="brush: js">// content-script.js
-
-function handleResponse(message) {
- console.log(`background script sent a response: ${message.response}`);
-}
-
-function handleError(error) {
- console.log(`Error: ${error}`);
-}
-
-function sendMessage(e) {
- const sending = browser.runtime.sendMessage({content: "message from the content script"});
- sending.then(handleResponse, handleError);
-}
-
-window.addEventListener("click", sendMessage);</pre>
-
-<p>Here is a version of the corresponding background script, that sends a response synchronously, from inside in the listener:</p>
-
-<pre class="brush: js">// background-script.js
-
-function handleMessage(request, sender, sendResponse) {
- console.log(`content script sent a message: ${request.content}`);
- sendResponse({response: "response from background script"});
-}
-
-browser.runtime.onMessage.addListener(handleMessage);</pre>
-
-<p>And here is another version which uses {{jsxref("Promise.resolve()")}}:</p>
-
-<pre class="brush: js">// background-script.js
-
-function handleMessage(request, sender, sendResponse) {
- console.log(`content script sent a message: ${request.content}`);
- return Promise.resolve({response: "response from background script"});
-}
-
-browser.runtime.onMessage.addListener(handleMessage);</pre>
-
-<h3 id="Sending_an_asynchronous_response_using_sendResponse">Sending an asynchronous response using sendResponse</h3>
-
-<p>Here is an alternative version of the background script from the previous example. It sends a response asynchronously after the listener has returned. Note <code>return true;</code> in the listener: this tells the browser that you intend to use the <code>sendResponse</code> argument after the listener has returned.</p>
-
-<pre class="brush: js">// background-script.js
-
-function handleMessage(request, sender, sendResponse) {
- console.log(`content script sent a message: ${request.content}`);
- setTimeout(() =&gt; {
- sendResponse({response: "async response from background script"});
- }, 1000);
- return true;
-}
-
-browser.runtime.onMessage.addListener(handleMessage);
-</pre>
-
-<h3 id="Sending_an_asynchronous_response_using_a_Promise">Sending an asynchronous response using a Promise</h3>
-
-<p>This content script gets the first <code>&lt;a&gt;</code> link on the page and sends a message asking if the link's location is bookmarked. It expects to get a Boolean response (<code>true</code> if the location is bookmarked, <code>false</code> otherwise):</p>
-
-<pre class="brush: 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);</pre>
-
-<p>Here is the background script. It uses <code>{{WebExtAPIRef("bookmarks.search()")}}</code> to see if the link is bookmarked, which returns a {{jsxref("Promise")}}:</p>
-
-<pre class="brush: js">// background-script.js
-
-function isBookmarked(message, sender, response) {
- return browser.bookmarks.search({
- url: message.url
- }).then(function(results) {
- return results.length &gt; 0;
- });
-}
-
-browser.runtime.onMessage.addListener(isBookmarked);</pre>
-
-<p>If the asynchronous handler doesn't return a Promise, you can explicitly construct a promise. This rather contrived example sends a response after a 1-second delay, using <code><a href="/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout">Window.setTimeout()</a></code>:</p>
-
-<pre class="brush: js">// background-script.js
-
-function handleMessage(request, sender, sendResponse) {
- return new Promise(resolve =&gt; {
- setTimeout( () =&gt; {
- resolve({response: "async response from background script"});
- }, 1000);
- });
-}
-
-browser.runtime.onMessage.addListener(handleMessage);</pre>
-
-<p>{{WebExtExamples}}</p>
-
-<div class="note"><strong>Acknowledgements</strong>
-
-<p>This API is based on Chromium's <a href="https://developer.chrome.com/extensions/runtime#event-onMessage"><code>chrome.runtime</code></a> API. This documentation is derived from <a href="https://chromium.googlesource.com/chromium/src/+/master/extensions/common/api/runtime.json"><code>runtime.json</code></a> in the Chromium code.</p>
-
-<p>Microsoft Edge compatibility data is supplied by Microsoft Corporation and is included here under the Creative Commons Attribution 3.0 United States License.</p>
-</div>
-
-<div class="hidden">
-<pre class="brush: js">// Copyright 2015 The Chromium Authors. All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-// * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-// * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-</pre>
-</div>