发生了一些奇怪的事情....我使用了Phaserjs并试图覆盖Device类:
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)
如果不知道旧值的设置位置,则无法回答。 Device对象只包含基于navigator.userAgent返回true / false值的函数(而不是变量),所以你确定是在任何地方设置的任何旧值吗?
另外,您是否在使用的FireFox浏览器上查看了“navigator.userAgent”的字符串值?也许它根本不包含字符串firefox
?
从navigator.userAgent字符串中检测浏览器和操作系统非常棘手。多年来,navigator.userAgent字符串已成为unwieldy and very cluttered,因为主要的浏览器已经从相同的代码库,浏览器模拟,向后兼容性等分叉。
您可能需要查看platform.js,而不是自己滚动。