2016-11-21 5 views
1

Etwas seltsam passiert .... Ich Phaserjs verwendet und versuchen, die Geräteklasse außer Kraft zu setzen:Globale Variable halten Altwert

let Device = (function(device) 
     { 
     return { 
      Android :function() { 
       return navigator.userAgent.match(/Android/i) == true; 
       //return Phaser.Device.Android != undefined; 
      }, 
      BlackBerry: function() { 
       return navigator.userAgent.match(/BlackBerry/i) == true; 
      }, 
      iOS: function() { 
       return navigator.userAgent.match(/iPhone|iPad|iPod/i) == true; 
       //return Phaser.Device.iOS == true; 
      }, 
      Opera: function() { 
       return navigator.userAgent.match(/Opera Mini/i) == true; 
      }, 
      Windows: function() { 
       return navigator.userAgent.match(/IEMobile/i) == true; 
       //return Phaser.Device.WindowsPhone != undefined; 
      }, 
      firefox : function() { 
       return navigator.userAgent.toLowerCase().indexOf('firefox') > -1; 
       //return Phaser.Device.Firefox == true; 
      }, 
      any: function() { 
       return (Device.Android() || Device.BlackBerry() || Device.iOS() || Device.Opera() || Device.Windows()); 
      }, 
      debug: function() 
      { 
       //console.log("Ios "+Phaser.Device.Firefox+" Dev:"+Phaser.Device); 
       return "Android:"+Device.Android()+" "+ 
        "BlackBerry:"+Device.BlackBerry()+" "+ 
        "iOS:"+Device.iOS()+" "+ 
        "Opera:"+Device.Opera()+" "+ 
        "Windows:"+Device.Windows()+" "+ 
        "firefox:"+Device.firefox(); 
      } 
      }; 
     })(Phaser.device); 
    export default Device; 

die Phaser.Device ein Singleton ist und wie $(document).ready muss es zunächst initialisiert werden. die Funktion ist Phaser.Device.whenReady(foobar,this);

Das Problem ist, wenn ich den firefox oder iOS-Funktion aufrufen (Device.iOS()) ich einen alten Wert und nicht der initialisierte Wert (wahr und falsch) erhalten

I Gerät wie dieses in einem Haupt-Skript importieren :

import Device from './helpers/GameDevice'; 

WARUM? Das Problem scheint ein Problem des Umfangs zu sein, aber ich weiß nicht was!

+0

Was ist der alte Wert? –

+0

Ich bin auf FF, also muss ich Firefox haben: WAHR und iOS: FALSCH aber ich bekomme FF: FALSCH und iOS: wahr, das ist unlogisch !!! – xeonarno

+0

Die Browsererkennung kann aus verschiedenen Gründen fehlschlagen, einschließlich Add-ons. navigator.userAgent ist eine neue Sache, so dass es nicht immer funktioniert –

Antwort

0

Dies ist unmöglich zu beantworten, ohne zu wissen, wo die alten Werte gesetzt sind. Das Device-Objekt enthält nur Funktionen (keine Variablen), die basierend auf dem navigator.userAgent einen True/False-Wert zurückgeben, also sind Sie sicher, dass irgendwelche alten Werte irgendwo gesetzt sind?

Haben Sie sich auch den String-Wert von "navigator.userAgent" im FireFox-Browser angesehen, den Sie verwenden? Vielleicht enthält es überhaupt nicht die Zeichenfolge firefox?

Das Erkennen von Browser und Betriebssystem aus der navigator.userAgent-Zeichenfolge ist sehr schwierig. Im Laufe der Jahre hat sich navigator.userAgent String unwieldy and very cluttered geworden, weil die gängigen Browsern haben aus dem gleichen Code-Basis, Browser-Identitätswechsel, Abwärtskompatibilität usw.

Sie möchten überprüfen, platform.js, statt rollen Sie Ihre eigenen gegabelt ist.