userScripts.onBeforeScript

browser.userScriptsonBeforeScript 事件在用户脚本执行之前触发。它只能包含在 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 表仅在浏览器中加载

另请参阅