如何在 Firefox Add-on SDK 中将构造函数从特权范围导出到较低特权范围
How to export a constructor from privileged scope to a less-privileged scope in Firefox Add-on SDK
我正在尝试编写一个 Firefox 扩展,它连接到 WebAudio 并向所有 AudioContext 添加 'master-gain'。
我试图通过覆盖 window
命名空间中的 AudioContext 构造函数来实现这一点。这样,当用户尝试访问 destination
时,我可以 return 一个 GainNode(内部连接到 destination
)。这是一个 hack,但我认为它可能有用。
我目前正在努力将我的 newAudioContext
构造函数从插件脚本(特权范围)导出到页面脚本(较低特权)。
我试过了...
unsafeWindow.AudioContext = cloneInto(newAudioContext,unsafeWindow);
但我仍然在页面脚本中得到原始的 AudioContext。
我也试过了
exportFunction(newAudioContext, unsafeWindow, {defineAs: "AudioContext"});
但是将其导出为函数而不是构造函数。
我知道结构化克隆有局限性,但有没有其他方法可以覆盖 AddOn 中的 window.AudioContext?
如果您需要在非特权上下文中 运行 更复杂的代码(例如对象构造),您可以通过 mozIJSSubScriptLoader.
加载脚本后,任何需要调用特权代码的函数都可以从 chrome 端修补到其原型中。
您可以在 DOM 解析之前执行此操作 - 因此在任何内容脚本执行之前 - 通过侦听 DOMWindowCreated 事件。
您必须从 frame script 执行此操作,因为插件-sdk 的页面-mod 沙箱没有足够的权限来访问脚本加载器。
将与不安全 window 的交互保持在最低限度,即 运行ning 代码完全在具有 xrays 的特权环境中或完全在不受信任的环境中具有最少的无论如何,这两者之间的粘合方法似乎是很好的安全卫生。
当然你应该知道内容代码将能够分离和mod验证你在内容中创建的任何类。毕竟是不可信的
我正在尝试编写一个 Firefox 扩展,它连接到 WebAudio 并向所有 AudioContext 添加 'master-gain'。
我试图通过覆盖 window
命名空间中的 AudioContext 构造函数来实现这一点。这样,当用户尝试访问 destination
时,我可以 return 一个 GainNode(内部连接到 destination
)。这是一个 hack,但我认为它可能有用。
我目前正在努力将我的 newAudioContext
构造函数从插件脚本(特权范围)导出到页面脚本(较低特权)。
我试过了...
unsafeWindow.AudioContext = cloneInto(newAudioContext,unsafeWindow);
但我仍然在页面脚本中得到原始的 AudioContext。
我也试过了
exportFunction(newAudioContext, unsafeWindow, {defineAs: "AudioContext"});
但是将其导出为函数而不是构造函数。
我知道结构化克隆有局限性,但有没有其他方法可以覆盖 AddOn 中的 window.AudioContext?
如果您需要在非特权上下文中 运行 更复杂的代码(例如对象构造),您可以通过 mozIJSSubScriptLoader. 加载脚本后,任何需要调用特权代码的函数都可以从 chrome 端修补到其原型中。
您可以在 DOM 解析之前执行此操作 - 因此在任何内容脚本执行之前 - 通过侦听 DOMWindowCreated 事件。
您必须从 frame script 执行此操作,因为插件-sdk 的页面-mod 沙箱没有足够的权限来访问脚本加载器。
将与不安全 window 的交互保持在最低限度,即 运行ning 代码完全在具有 xrays 的特权环境中或完全在不受信任的环境中具有最少的无论如何,这两者之间的粘合方法似乎是很好的安全卫生。
当然你应该知道内容代码将能够分离和mod验证你在内容中创建的任何类。毕竟是不可信的