You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox扩展导出async函数被网页调用报Permission denied访问then属性错误

问题原因

该报错由Firefox的安全上下文隔离机制触发:扩展内容脚本与网页运行在相互隔离的安全上下文中,你直接导出的request异步函数返回的Promise属于扩展上下文,网页侧无权限访问扩展上下文对象的then属性,因此抛出权限拒绝错误。即使是普通同步函数,如果返回扩展上下文的对象,网页侧访问其属性时也会触发同类报错。

修复后的扩展代码
// 获取网页上下文的Promise构造器
const PagePromise = window.wrappedJSObject.Promise;

let ethereum = new window.Object();

// 定义导出给网页的request方法
const request = exportFunction(function() {
    console.log("request");
    // 返回网页上下文的Promise实例
    return new PagePromise((resolve) => {
        // 你的业务逻辑
        const result = ["0x00"];
        // 将返回值克隆到网页上下文
        resolve(cloneInto(result, window.wrappedJSObject));
    });
}, window, { allowCallbacks: true });

// 挂载request方法到ethereum对象
ethereum.request = request;

// 将整个ethereum对象克隆到网页上下文后挂载
window.wrappedJSObject.ethereum = cloneInto(ethereum, window.wrappedJSObject, {
    cloneFunctions: true
});
关键配置说明
  • cloneInto是Firefox提供的跨上下文对象传递API,第二个参数指定目标上下文为网页上下文,cloneFunctions: true配置支持克隆函数属性。
  • 导出函数时添加allowCallbacks: true配置,支持跨上下文调用回调。
  • 异步场景必须使用网页上下文的Promise构造返回实例,避免网页侧访问then属性权限不足。
  • 同步函数场景下,只需要将返回值通过cloneInto处理后返回即可解决权限报错。

内容的提问来源于stack exchange,提问作者Rémi Baldy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:45:02