我正在创建一个Firefox扩展,其中我想遍历Application.windows
数组并检查其元素之一是否与Application.activeWindow
相同。
我的代码中提到的摘录如下所示:
for (var i in Application.windows) {
if (Application.windows[i]==Application.activeWindow) alert('debug');
// there was some more complex code than alert('debug'),
// but since it didn't work, I decided to try with an alert
}
不幸的是,从未查看过“调试”警报。因此,我决定尝试以下代码(仅打开一个窗口):
// the following code runs in an event listener for window.onload
alert(Application.windows[0]);
alert(Application.activeWindow);
alert(Application.windows[0]==Application.activeWindow);
Firefox显示了3条警报:第一个是
[object Object]
,第二个是[xpconnect wrapped fuelIWindow]
,最后一个(这并不令我惊讶)说是false
。因此,似乎我要比较的对象具有不同的类型。我该如何处理?提前致谢。 最佳答案
你有两个问题。
首先是XPConnect不支持数组值属性,因此,当FUEL(或STEEL或SMILE)返回数组时,它们实际上是在返回内部对象的nsIVariant!另一方面,单值对象返回XPConnect包装器,该包装器隐藏内部对象。
第二个是每次访问Windows或activeWindow时,都会创建新的内部对象,因此即使对activeWindow的两次调用也会返回不同的对象。
解决此问题的方法是避免FUEL,并直接使用window mediator枚举窗口。
关于javascript - 如何比较Application.windows [x]和Application.activeWindow?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5580681/