Javascript 未在移动设备上加载外部脚本:未捕获类型错误
从移动设备上的CDN加载library JS脚本支付时,我看到一个错误:Javascript 未在移动设备上加载外部脚本:未捕获类型错误,javascript,mobile,Javascript,Mobile,从移动设备上的CDN加载library JS脚本支付时,我看到一个错误: paddle.js:94 Uncaught TypeError: Cannot read property '1' of null 奇怪的是,相同的代码在任何桌面浏览器上都能正常加载和工作,但在任何移动设备上都无法加载 。要获得实际错误,您可以在移动电话上打开它,也可以使用移动仿真器 你认为我加载的脚本不正确吗?还是我怀疑这是一个支付系统缺陷,因为他们有太多的客户没有注意到这一点 代码: 拨片脚本中的第94行是以下切换
paddle.js:94 Uncaught TypeError: Cannot read property '1' of null
奇怪的是,相同的代码在任何桌面浏览器上都能正常加载和工作,但在任何移动设备上都无法加载
。要获得实际错误,您可以在移动电话上打开它,也可以使用移动仿真器
你认为我加载的脚本不正确吗?还是我怀疑这是一个支付系统缺陷,因为他们有太多的客户没有注意到这一点
代码:
拨片脚本中的第94行是以下切换语句:
switch(os){
case'Mac OS X':
osVersion=/Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;
case'Android':
osVersion=/Android ([\.\_\d]+)/.exec(nAgt)[1];
break;
case'iOS':
osVersion=/OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion=osVersion[1]+'.'+ osVersion[2]+'.'+(osVersion[3]|0);
break;
}
它似乎在试图确定Android、iOS和MacOSX设备的操作系统版本
变量nAgt是从navigator.userAgent获取的浏览器用户代理字符串。这些正则表达式假设,如果用户代理头包含字符串“Mac OS X”、“Android”或“OS”,那么它后面将紧跟一个版本号
如果这些正则表达式匹配失败,那么exec将返回null,null[1]将抛出您看到的TypeError
您使用的是什么手机或模拟器?你能把这个放到设备上的JS提琴里,看看上面写的是什么吗
document.body.innerHTML=+navigator.userAgent+
我可以想象,您将有一个字符串满足上面的一个切换条件,但不返回正则表达式匹配
这仅仅是来自Paile的糟糕代码的结果,它不应该期望用户代理字符串采用特定的格式,因为它们可以被用户、插件、设备、代理等各种内容覆盖
如果您可以覆盖正在使用的设备或模拟器的用户代理,使其与其中一个正则表达式模式匹配,则这样做将不再出现错误。感谢您的帮助。有时,在使用大型API时,您最不希望他们使用错误的做法,而是责怪自己。
switch(os){
case'Mac OS X':
osVersion=/Mac OS X (10[\.\_\d]+)/.exec(nAgt)[1];
break;
case'Android':
osVersion=/Android ([\.\_\d]+)/.exec(nAgt)[1];
break;
case'iOS':
osVersion=/OS (\d+)_(\d+)_?(\d+)?/.exec(nVer);
osVersion=osVersion[1]+'.'+ osVersion[2]+'.'+(osVersion[3]|0);
break;
}