2011-04-07 4 views
2

Application.windows 배열을 반복하고 해당 요소 중 하나가 Application.activeWindow과 같은지 확인하려는 Firefox 확장 프로그램을 만들고 있습니다.
내 코드에서 언급 발췌은 다음과 같습니다 Application.windows [x]를 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); 

파이어 폭스 3 경고를 표시 : : 따라서 나는 (열 하나의 창)이 코드를 사용하기로 결정했습니다 첫 번째는 [object Object], 두 번째였다 - 나를 놀라게하지 않았다 [xpconnect wrapped fuelIWindow], 마지막 하나 ()라고 false이 말했다. 그래서 저는 비교하려고하는 대상이 다른 유형을 가진 것처럼 보입니다. 이 문제를 어떻게 처리 할 수 ​​있습니까? 미리 감사드립니다.

답변

1

두 가지 문제가 있습니다.

첫 번째는 XPConnect가 배열 값 속성을 지원하지 않으므로 FUEL (또는 STEEL 또는 SMILE)이 배열을 반환하면 실제로 내부 개체의 nsIVariant가 반환됩니다. 반면에, 단일 값 객체는 내부 객체를 숨기는 XPConnect 래퍼를 반환합니다.

두 번째는 windows 또는 activeWindow에 액세스 할 때마다 새로운 내부 개체가 만들어 지므로 activeWindow를 두 번 호출해도 다른 개체가 반환된다는 것입니다.

이 문제를 해결하려면 FUEL을 피하고 window mediator을 사용하여 창을 직접 열거하십시오.

+0

해답과 중요한 정보에 감사드립니다. 윈도우 메디 에이터를 사용하여 원하는 결과를 얻을 수있었습니다. – rhino

관련 문제