如何在Firefox加载项SDK中将构造函数从特权范围导出到特权较低的范围

如何在Firefox加载项SDK中将构造函数从特权范围导出到特权较低的范围,firefox,firefox-addon,firefox-addon-sdk,web-audio-api,Firefox,Firefox Addon,Firefox Addon Sdk,Web Audio Api,我正在尝试编写一个Firefox扩展,它与WebAudio挂钩,并为所有AudioContext添加一个“主增益” 我试图通过重写窗口命名空间中的AudioContext构造函数来实现这一点。这样,当用户尝试访问目的地时,我可以返回一个GainNode(内部连接到目的地)。这是一个黑客,但我认为它可能是有用的 我目前正在努力将我的newAudioContext构造函数从加载项脚本(特权范围)导出到页面脚本(特权较低) 我试过 unsafeWindow.AudioContext=cloneInto

我正在尝试编写一个Firefox扩展,它与WebAudio挂钩,并为所有AudioContext添加一个“主增益”

我试图通过重写
窗口
命名空间中的AudioContext构造函数来实现这一点。这样,当用户尝试访问
目的地时,我可以返回一个GainNode(内部连接到
目的地
)。这是一个黑客,但我认为它可能是有用的

我目前正在努力将我的
newAudioContext
构造函数从加载项脚本(特权范围)导出到页面脚本(特权较低)

我试过

unsafeWindow.AudioContext=cloneInto(newAudioContext,unsafeWindow)

但我仍然在页面脚本中获得原始的AudioContext

我也试过了

exportFunction(newAudioContext,unsafeWindow,{defineAs:“AudioContext”})

但这会将其导出为函数,而不是构造函数


我理解结构化克隆有其局限性,但是否有其他方法可以从加载项覆盖window.AudioContext?

如果需要在非特权上下文中运行更复杂的代码(例如对象构造),只需通过。 任何需要调用特权代码的函数都可以在脚本加载后从chrome端修补到原型中

您可以在DOM解析之前,也就是在任何内容脚本执行之前,通过侦听事件来执行此操作

由于插件sdk的page mod沙盒没有足够的权限访问脚本加载程序,因此您必须从一个客户端执行此操作

将与不安全窗口的交互保持在最低限度,即要么完全在有特权的环境中运行代码,要么完全在不受信任的环境中运行代码,在这两者之间使用最少的粘合方法,这似乎是一种良好的安全卫生


当然,您应该知道,内容代码将能够分离和修改您在内容中创建的任何类。毕竟这是不可信的。

酷!这听起来可能有用。让我试试。好的。我有点困惑。我应该从我的插件代码中调用
mozIJSSubScriptLoader
,对吗?我正在使用插件SDK,所以这会在我的
main.js
代码中吗?对不起,我对制作插件真的很陌生。此外,我如何制作网页的
窗口,该网页已为
MozijsubscriptLoader
加载了
targetObj