2012-01-06 2 views
0

Firefox 9에서 이상한 JavaScript 문제가있는 사람은 누구입니까? 우리는 두 가지 문제가 있습니다.Firefox 9의 JavaScript 문제

첫 번째 경우는 true를 반환해야 할 때 instanceof 연산자가 false를 반환한다는 것입니다. Firebug를 사용하여 검사 할 때, 변수는 확실히 기대 한 것이지만 false를 반환합니다. 그러나 코드 내에 추가 중단 점을 추가하면 true가 반환됩니다. 더 많은 중단 점 추가를 제외하고는 아무 것도 할 수 없으며 작동을 시작할 것입니다.

또 다른 예로, 전역 적으로 액세스되는 함수 내에서 범위가 지정된 변수를 만들었습니다. 이런 식으로 뭔가 (우리는 글로벌 네임 스페이스를 만들 YUI 2를 사용주의) : 내 개인 페이지, YAHOO.MyNS.showPanel에

YAHOO.namespace("MyNS"); 

(function() { 
    var _panel; 

    YAHOO.MyNS.showPanel = function() { 
    if (!_panel) { 
     // code to create _panel 
     _panel = new YAHOO.widget.Panel(...); 
    } 
    _panel.show(); 
    }; 

    YAHOO.MyNS.hidePanel = function() { 
    if (_panel && _panel !== null && _panel.cfg.getProperty("visible")) { 
     _panel.hide(); 
    } 
    }; 
})(); 

는() 잘 작동,하지만 나중에 YAHOO.MyNS를 호출 할 때. hidePanel(), _panel이 정의되지 않았기 때문에 실패합니다. showPanel() 및 hidePanel() 메서드에서 모두 중단 점에 배치하면 _panel이 정의되지 않습니다.

우리는 어려움을 겪고 있습니다. 새로운 기능이기 때문에 파이어 폭스에서 타입 추론 기능을 끄는 것이 효과가 있었는지 아닌지 확인하려고 시도했습니다.

+0

참고 : if (_panel && _panel! == null ...)가 중복되었습니다. null은 위증입니다. if (_panel && _panel.cfg && _panel.cfg.getProperty && ... 더 적절할 것입니다.) – Tracker1

답변

0

유이 (YUI2는 말할 것도없고)를 사용한 이래로 오랜 시간이 걸렸지 만, 이것이 파이어 폭스 9 관련 문제인지는 모르겠다. 그렇다면 FireFox 9의 버그 일 수는 없다.

내부 참조와 showhide 메서드 집합을 가진 Panel 개체를 만든 다음 네임 스페이스에 첨부하는 것이 더 깔끔합니다. 적어도 문제가 범위 지정에 대해 걱정할 필요는 없습니다 당신의 종결의.

+0

참고 : YAHOO.widget.Panel이 아니라 Panel이라는 객체 만 있습니다. –

0

console.log을 호의적으로 신뢰할 수 없으므로 통화를 한 후에 개체가 표시 될 수 있습니다. Google 크롬도 이와 같은 문제를 겪고 있습니다. 자바 스크립트 엔진이 빠르기 때문에 파이어 폭스 9에서만 알 수 있습니다.

그러나 버그가 해결되지는 않지만 이상한 동작을 설명 할 수 있습니다.

나는 당신이 당신의 수표를 더 명백하게 할 것을 제안한다. _panelnull 또는 false으로 초기화하고 확인하십시오. new YAHOO.widget.Panel(...)Panel 이외의 오브젝트를 리턴 할 수있는 경우 오브젝트도이를 점검합니다.

언뜻보기에 코드가 잘 보입니다. 아마도 발췌에서 버그를 제거했을 것입니까?

+0

나는 이러한 명시적인 검사를 할 수 있지만, 새로운 YAHOO.Widget.Panel은 항상 Panel을 반환 할 것입니다.이 코드는 FF 3.5 이후로 변경되지 않았습니다. 첫 번째 주석이 "코드 포함"을 원하지 않기 때문에 코드를 포함하고 싶었습니다. 샘플 제발 ". – erikaho