userScripts.onBeforeScript
在 browser.userScripts
的 onBeforeScript
事件在用户脚本执行之前触发。它只能包含在 API 脚本中,即在 "user_scripts"
中注册的脚本,用于检测自定义 API 方法是否应导出到用户脚本。
语法
js
browser.userScripts.onBeforeScript.addListener(listener)
browser.userScripts.onBeforeScript.removeListener(listener)
browser.userScripts.onBeforeScript.hasListener(listener)
事件具有三个功能
addListener(listener)
-
向此事件添加侦听器。
removeListener(listener)
-
停止侦听此事件。
listener
参数是要移除的侦听器。 hasListener(listener)
-
检查是否为此事件注册了
listener
。如果正在侦听,则返回true
,否则返回false
。
addListener 语法
参数
listener
-
当此事件发生时调用的函数。该函数传递以下参数
script
-
一个表示与网页匹配的用户脚本的
object
。其属性和方法如下defineGlobals
-
一个方法,用于导出一个包含全局可用于用户脚本沙箱的属性和方法的对象。此方法必须同步调用,以保证用户脚本尚未执行。
export
-
一个方法,用于将值转换为用户脚本代码可以访问的值。此方法用于在导出到用户脚本的 API 方法中返回或解析非原始值。导出的对象还可以提供用户脚本代码可以访问和调用的方法。
global
-
一个
object
,用于访问用户脚本的沙箱。 metadata
-
使用
userScripts.register
注册用户脚本时设置的scriptMetadata
属性。
示例
侦听器使用方法示例
js
browser.userScripts.onBeforeScript.addListener((script) => {
script; // This is an API object that represents the user script
// that is going to be executed.
script.metadata; // Access the user script metadata (returns the
// value of the scriptMetadata property from
// the call to userScripts.register).
// Export some global properties into the user script sandbox
// (this method has to be called synchronously from the
// listener, otherwise the user script may have executed).
script.defineGlobals({
aGlobalPropertyAccessibleFromUserScriptCode: "prop value",
myCustomAPIMethod(param1, param2) {
// Custom methods exported from the API script can use
// the WebExtensions APIs available to content scripts.
browser.runtime.sendMessage(/* … */);
// …
return 123; // primitive values can be returned directly
// …
// Non primitive values have to be exported explicitly
// using the export method provided by the script API
// object
return script.export({
objKey1: {
nestedProp: "nestedValue",
},
// Explicitly exported objects can also provide methods.
objMethod() {
/* … */
},
});
},
async myAsyncMethod(param1, param2, param3) {
// exported methods can also be declared as async
},
});
});
浏览器兼容性
BCD 表仅在浏览器中加载