奇怪的事情發生了....我用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';
爲什麼?問題接近是一個範圍問題,但我不知道是什麼!
什麼是舊價值? –
我在FF,所以我必須有Firefox:TRUE和iOS:FALSE,但我得到FF:FALSE和iOS:true,這是不合邏輯的! – xeonarno
瀏覽器檢測可能由於多種原因而失敗,包括附加。 navigator.userAgent是最近的事情,所以它並不總是工作 –