替换JS语言文件会加载旧值
Replacing JS language file loads old values
我在应用程序中实现了一个简单的本地化切换。我通过从组合(或其他)中选择laguage,然后将JS语言文件与另一个切换来实现这一点。
function setLang(lang) {
setCookie('vegindex_lang', lang, 365);
// Find language 'script' element and replace according to lang
var elements = document.getElementsByTagName('script');
for (var i = 0; i < elements.length; i++) {
if (elements[i].id && elements[i].id == 'lang') {
var src = 'JavaScript/Localisation/strings_' + lang + '.js';
document.head.replaceChild(newElement(src), elements[i]);
loadStrings();
break;
}
}
}
function newElement(src) {
var s = document.createElement("script");
s.type = "text/javascript";
s.src = src;
s.id = 'lang';
return s;
}
function loadStrings() {
// Wizard wrapper window
wizardWrapper.setTitle(wizard_title);
// Wizard panel
wizardButtonDisclaimer.setText(wizard_button_disclaimer);
wizardButtonBack.setText(wizard_button_back);
wizardButtonNext.setText(wizard_button_next);
// Reload wizard
wizardWrapper.doLayout();
}
语言文件的典型内容:
var wizard_title = 'This is english';
var wizard_button_disclaimer = 'Disclaimer';
var wizard_button_back = 'Back';
var wizard_button_next = 'Next';
它工作正常,但总是加载前一种语言。那就是:
- 第一次语言切换-什么都没发生
- 第二次语言切换-语言切换到我第一次选择的语言
看起来新注入的脚本文件在添加后就不可用了。有人知道为什么会发生这种事吗?
这可能是因为您注入了脚本标记,然后立即调用loadStrings()。不过,语言文件可能仍在(向下)加载。
这被称为竞赛条件。这种情况的发生取决于你的互联网速度和其他一些依赖性,你应该尽量避免这种情况。
例如,您可以通过使用像labJS这样的脚本加载程序来避免这种情况(http://labjs.com/),需要JS(http://requirejs.org/),或任何其他。这将允许您加载脚本并等待它,然后当它成功加载时,执行loadStrings()-方法。
我只是想发布更正后的setLang函数,其中包括一个使用RequireJS:的实现
function setLang(lang) {
setCookie('vegindex_lang', lang, 365);
// Find language 'script' element and replace according to lang
var elements = document.getElementsByTagName('script');
if (lang != langfile) {
for (var i = 0; i < elements.length; i++) {
if (elements[i].id && elements[i].id == 'lang') {
var src = 'JavaScript/Localisation/strings_' + lang + '.js';
document.head.replaceChild(newElement(src), elements[i]);
// 'require' vil fire loadStrings() as soon as 'src' file loads
require([src], function () {
loadStrings();
});
break;
}
}
}
}
相关文章:
- 加载文件,然后调用回调函数
- 根据浏览器大小加载文件
- 错误:无法在“XMLHttpRequest”上执行“发送”:无法加载“文件”:AngularJS SPA
- Ajax在mootools中使用来加载文件
- 加载文件时xmlhttp不稳定,如何修复
- Require.js何时加载文件
- 有没有办法在不打包的情况下在 nodejs 上加载文件
- 如何通过从浏览器 js 控制台触发的 require.js 重新加载文件
- 使用jQuery加载文件,计算类的元素并设置间隔比率
- 如何在 AngularJS UI 路由器中从bower_component加载文件
- JavaScript 本地应用程序保存/加载文件
- 如何在特定页面上加载文件
- 内容安全策略不从本地主机加载文件
- Javascript 无法从其他目录加载文件
- Extjs MVC 文件夹结构无法加载文件
- 节点.js - 在运行时加载文件
- nodejs加载文件
- Javascript/AAJAX仅重新加载文件“;onchange”;
- 加载文件,并在特定行之后删除javascript/jquery中的所有剩余行
- 是否可以在非服务页面上使用JS/HTML5 FileReader加载文件