在国际化测试过程中,不知你是否遇到过这样的情况?用FF访问某一页面时候,发现该页面已被完美的本地化;而换到了Chrome之后,问题出现了,整个页面依然充斥着英文。(语言设置没有问题!)
有人说,那就清理一下cache呗!非常好,说做咱就做,不过……清理完之后发现Chrome页面没任何变化,让大家失望了,这可如何是好?
反思这两个测试用例,除了浏览器的差异,操作步骤没有任何不同,那么该问题应该可以进一步转化为——FF跟Chrome有何区别?抢答开始。
甲:二者内核不一样啊,FF是Gecko,Chrome 用 Webkit!
乙:FF启动后进程只有firefox.exe+ plugin-cuntainer.exe两个,而Chrome每个页面都有一个进程,每个插件、每个扩展又各一个进程!
丙:FF更开放,Chrome浏览速度更快!
OK 大家说的都对,但这跟国际化有何关系呢?
甲:……
乙:……
丙:都看我干吗?o(╯□╰)o
其实问题应该定位在二者JavaScriptEngine上,尝试着总结如下吧,不足之处,还请各位指正。
1. 获取鼠标的坐标时,FF不支持event.x,代之以event.screenX
2. FF不能在JS中直接使用event对象,必须将event传递给JS方法再使用
3. FF使用document.documentElement.scrollTop能够获取滚动的高度,但Chrome代之以document.body.scrollTop
4. 动态添加文本innerText对FF无效,应该代之以innerHTML
5. FF上获取不到formname,只能用document.formname来获取表单对象
6. Chrome只支持AJAX异步读取数据,同步被抛弃
根据多年游戏经验,最后出场的一般都是大boss!走读示意代码,果然有嫌犯async: false 八成就是他,果断删除,转而用异步方式读取翻译文件,噔噔噔噔~~~问题解决!
/**
* Load language JSONfile according to browser's locale setting using
* AJAX synchronouscall.
*/
url = '../locale/' + this.locale + '.json';
$.ajax({
type:"GET",
url: url,
dataType:"json",
async: false,
cache: false,
success:function(data) {
if (!!data) {
self.translatedTable = data;
} else {
JSLogger.error('Invalid translation data: ' + url);
}
},
error:function(jqXHR, textStatus, errorThrown) {
JSLogger.error('Failed to load translation data: ' + url +
', status: '+ textStatus + ', errorThrown: ' + errorThrown);
}
});
尘埃落定,但从这个故事中,我们又可以学到什么呢?(尤其是国际化测试人员),个人认为至少有两点吧。
1. 涉及资源文件读取的部分,询问清是否采用了AJAX技术,同步还是异步,从而再制定matrix,而不仅仅是凭经验
2. 多探索各个平台,各个浏览器对国际化的影响,不要只为了遍历制定的matrix而遍历