我正在创建一个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/

10-09 06:06
查看更多