关于 javascript:如何检查 Firefox 扩展代码是否在特权模式下运行?

How to check if Firefox extension code is running in privileged mode?

我在 Firefox 扩展程序和页面内容之间进行了一些事件调度/侦听。
页面内容代码被注入到扩展的 on-content-page-load 处理程序中。

有没有办法检查当前代码运行的模式是什么(特权模式或非特权模式)?


典型的方法是检查你是否可以访问 Components.classes:

1
2
3
4
5
6
7
try {
  Components.classes;
  alert("Yay! Privileged code.");
}
catch (e) {
  alert("Oops... Content privileges only.");
}

取决于环境:

在 addon-sdk 插件中,您可以检查 requireexports:

1
2
3
if(typeof(require)!=="undefined" && typeof(exports)!=="undefined"){
  //privileged
}

(注意:typeof 用于在检查变量是否存在时防止错误。)

按照 Wladimir 的建议检查 Components(或 Cc, Ci, Cu)。

甚至检查 xul:window 元素是否存在:

1
2
3
4
var xulWindow=document.querySelector("window#main-window[windowtype='navigator:browser']");
if(xulWindow){
  //privileged. in this case looking specifically for"navigator:browser" windowtype.
}