mirror of
https://github.com/mdn/webextensions-examples.git
synced 2026-04-16 14:28:33 +02:00
`chrome.runtime.connect` & `chrome.runtime.sendMessage` are still accessible to userscripts.
52 lines
2.2 KiB
JavaScript
52 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
// userscript_api.js defines a single function that generates the global APIs
|
|
// that should be made available to scripts running in this USER_SCRIPT sandbox.
|
|
// This script is scheduled to run before user scripts by the parseUserScript
|
|
// function in userscript_manager_logic.mjs
|
|
|
|
globalThis.initCustomAPIForUserScripts = grants => {
|
|
// Allow initialization only once.
|
|
delete globalThis.initCustomAPIForUserScripts;
|
|
|
|
// background.js calls userScripts.configureWorld({ messaging: true }), which
|
|
// exposes runtime.sendMessage here. When this method is called, the
|
|
// runtime.onUserScriptMessage listener (in background.js) is called, which
|
|
// in turn calls handleUserScriptMessage in userscript_manager_logic.mjs.
|
|
const sendMessage = browser.runtime.sendMessage;
|
|
|
|
// Clear access to privileged API to prevent userscripts from communicating
|
|
// to the privileged backend.
|
|
globalThis.browser = undefined;
|
|
globalThis.chrome = undefined;
|
|
|
|
if (grants.includes("GM_info")) {
|
|
// Example of an API that retrieves information:
|
|
// https://www.tampermonkey.net/documentation.php#api:GM_info
|
|
// https://violentmonkey.github.io/api/gm/#gm_info
|
|
// https://wiki.greasespot.net/GM.info
|
|
// NOTE: The following implementation of GM_info is async to demonstrate
|
|
// how one can retrieve information on demand. The actual GM_info function
|
|
// as defined by full-featured user script managers is synchronous.
|
|
globalThis.GM_info = async () => {
|
|
return sendMessage({ userscript_api_name: "GM_info" });
|
|
};
|
|
}
|
|
|
|
if (grants.includes("GM_openInTab")) {
|
|
// Example of an API that sends information:
|
|
// https://www.tampermonkey.net/documentation.php#api:GM_openInTab
|
|
// https://violentmonkey.github.io/api/gm/#gm_openintab
|
|
// https://wiki.greasespot.net/GM.openInTab
|
|
globalThis.GM_openInTab = async (url) => {
|
|
await sendMessage({ userscript_api_name: "GM_openInTab", args: [url] });
|
|
};
|
|
}
|
|
|
|
// TODO: Implement more APIs.
|
|
|
|
// After this function returns, the userscript may execute and potentially
|
|
// change built-in prototypes. To protect against that, make sure to store
|
|
// any functions that you want to use in a local variable!
|
|
};
|