Firefox extension share async function with return gives => Error: Permission denied to access property "then"

Firefox extension share async function with return gives => Error: Permission denied to access property "then"

我正在尝试从网页调用我的扩展中定义的异步函数并打印此函数的返回值,但我得到 "Error: Permission denied to access property "then""(如果我使用非异步函数执行此操作,我仍然收到权限被拒绝的错误。

我的分机:

let ethereum = new window.Object(); 

let request = async function () {
    console.log("request");
    return ["0x00"]; }

exportFunction(request, ethereum, {
    defineAs: "request"   });    

window.wrappedJSObject.ethereum = ethereum;

我的网页:

const address = await ethereum.request();

console.log("request") 有效。

我想我需要包装返回的变量或其他东西但找不到什么....

提前致谢!

exportFunction 将不起作用,因为您的 JS 函数在内部连接到内容脚本的 Promise(这就是 async 在幕后所做的)及其原型(用于创建其返回的 Promise) 实例,它们不会自动导出,因为它们不是函数的一部分。

  • 如果站点的 CSP 允许 unsafe-eval.

    ,则在页面上下文中使用 evalnew Function
    wrappedJSObject.eval(`test = ${async () => {
      console.log("request");
      return ["0x00"];
    }}`);
    

    wrappedJSObject.test = new wrappedJSObject.Function(`return (${async () => {
      console.log("request");
      return ["0x00"];
    }})()`);
    
  • 如果站点的 CSP 允许,请使用 script 元素,example