gpt4 book ai didi

javascript - 替换JS语言文件加载旧值

转载 作者:行者123 更新时间:2023-12-03 11:39:43 28 4
gpt4 key购买 nike

我在我的应用程序中实现了一个简单的本地化切换。我通过从组合(或其他)中选择语言,然后将 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';

它工作正常,但总是加载以前的语言。这意味着:

  • 第一次语言切换 - 没有任何反应
  • 第二次语言切换 - 语言切换到我第一次选择的语言

看起来新注入(inject)的脚本文件在添加后不可用。有人知道为什么会发生这种情况吗?

最佳答案

这可能是因为您注入(inject)了脚本标签,然后立即调用了 loadStrings()。不过,语言文件可能仍在(下载)加载中。

这称为竞争条件。这种情况的发生取决于您的互联网速度和其他几个依赖项,您应该始终尽力避免这种情况。

例如,您可以通过使用 labJS ( http://labjs.com/ )、RequireJS ( http://requirejs.org/ ) 或任何其他脚本加载器来避免这种情况。这将让您加载脚本并等待它,然后当它成功加载时,执行 loadStrings() 方法。

关于javascript - 替换JS语言文件加载旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26335163/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com