2016-11-21 116 views
1

奇怪的事情發生了....我用Phaserjs並嘗試覆蓋設備類:全局變量保持原值

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; 

的Phaser.Device是獨立的,並喜歡$(document).ready它需要首先初始化。該功能是Phaser.Device.whenReady(foobar,this);

問題是,當我致電Firefox或iOS的功能(Device.iOS())我得到一箇舊值,而不是初始值(true和false)

我在主腳本導入裝置這樣:

import Device from './helpers/GameDevice'; 

爲什麼?問題接近是一個範圍問題,但我不知道是什麼!

+0

什麼是舊價值? –

+0

我在FF,所以我必須有Firefox:TRUE和iOS:FALSE,但我得到FF:FALSE和iOS:true,這是不合邏輯的! – xeonarno

+0

瀏覽器檢測可能由於多種原因而失敗,包括附加。 navigator.userAgent是最近的事情,所以它並不總是工作 –

回答

0

如果不知道舊值的設置位置,這是不可能的。 Device對象只包含基於navigator.userAgent返回true/false值的函數(不是變量),那麼你確定有任何舊值設置在任何地方?

另外,你有沒有看過你正在使用的FireFox瀏覽器上的「navigator.userAgent」的字符串值?也許它根本不包含字符串firefox

從navigator.userAgent字符串中檢測瀏覽器和操作系統非常棘手。多年來,navigator.userAgent的字符串已成爲unwieldy and very cluttered,因爲主要的瀏覽器已經從相同的代碼庫,瀏覽器的模仿,向後兼容性等

你可能想看看platform.js,而不是滾動您自己分叉。