2012-01-06 10 views
0

Firefox 9で奇妙なJavaScriptの問題が発生している人は誰ですか?我々は2つの問題を抱えている。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()メソッドの両方でブレークポイントをfirebugに配置すると、_panelは未定義ではありません。

私たちは困惑しています。それは新しい機能なので、Firefoxでタイプ推論機能を無効にして、それが違いを生み出していないかどうかを確認しました。

+0

注:if(_panel && _panel!== null ...)は冗長です... nullは偽です。 – Tracker1

答えて

0

単独でYUI2を聞かせて、私はYUIを使用していたので、長い時間がかかったが、これは、Firefox 9特定の問題である場合、私は知らない、それがある場合、それはおそらく、FireFoxの9

のバグではありません

Panelオブジェクトを内部参照とshowhideメソッドのセットで作成し、それを名前空間に追加すると、問題がスコープであると心配する必要はありませんあなたの閉鎖の。

+0

注:YAHOO.widget.Panelではなく、Panelというオブジェクトだけです。 –

0

console.logを盲目的に信頼することはできません。コールを発行してからしばらく時間がかかります。 Google Chromeでも同様の問題が発生します。 JavaScriptエンジンがより速いので、Firefox 9にしか気付かないかもしれません。

これはあなたのバグを解決しませんが、それは奇妙な動作を説明するかもしれません。

あなたのチェックをより明示的にすることをお勧めします。 _panelnullまたはfalseを初期化して確認してください。 new YAHOO.widget.Panel(...)Panel以外の何かを返すことができるならば、それについてもオブジェクトがチェックされます。

あなたのコードは一見よく見えますが、おそらくあなたはその抜粋からバグを削除していますか?

+0

これらの明示的なチェックを行うことはできますが、私はドンしません。新しいYAHOO.Widget.Panelは常にPanelを返します。このコードはFF 3.5以降は変更されていません。最初のコメントに「コードを含めるサンプルお願いします。 – erikaho