这是情况。我正在构建一个使用大量脚本的网站,看起来有点像这样:
function getRandomArrayIndex(source_array) {
return Math.floor(Math.random() * source_array.length);
}
function getRandomArrayEntry(source_array) {
var random_index = getRandomArrayIndex(source_array);
return source_array[random_index];
}
function getRandomBlah() {
var blahs = [
["A"],
["B"],
["C"],
["D"],
["E"],
["F"],
["G"],
["H"],
["I"],
["L"],
["M"],
["N"],
["O"],
["P"],
["R"],
["S"],
["T"],
["V"],
["W"],
["Y"],
]; var random_blah = getRandomArrayEntry(blahs);
return random_blah;
}
function displayBlah(blah) {
const TEXT_ROW = 0;
const LINK_ROW = 1;
var blah_text = blah[TEXT_ROW];
var blah_link = blah[LINK_ROW]; if (blah_link != null) {
document.getElementById("blah").innerHTML = '<a href="' + blah_link + '">' + blah_text + '</a>';
} else {
document.getElementById("blah").innerHTML = blah_text;
}
}
function generateRandomBlah(){
var random_blah = getRandomBlah();
displayBlah(random_blah);
}
这将在使用 调用时<body onload="generateRandomBlah()">
,将其中一个字母随机插入<span id="blah"></span>
。
所以大约有 15 个这样的脚本,每个都有自己的函数,其名称因不同用途而略有不同 - generateRandomBlah2 等,每个脚本在 HTML 中都有相应的不同位置来完成其工作。
因为我不是一个很好的编码员,所以整个工作的方式是在“body onload”标签中,仅在这个标签内就有大约 15 个不同的“generateRandomBlah()”函数。该站点的性质意味着在任何一个页面上,我一次只需要 2 或 3 个这些脚本,但我需要能够在任何页面上调用它们中的任何一个。如您所见,我当前的策略是一次调用它们,如果脚本不存在对应的脚本,它将忽略该事实并转移到下一个。
除了它没有忽略没有对应的事实<span>
。
一旦一个不存在,其余的脚本就会中断并且实际上并没有做他们应该做的事情。查看 Chrome 的“检查代码”中的代码会发现第一个脚本出现错误,该脚本恰好中断:“Uncaught TypeError: Cannot set property 'innerHTML' of null”。我看到了几个潜在的解决方案,但我可能完全不知道:
1)在每个脚本中添加一些代码,告诉它,如果<span id>
页面上没有插入代码,它会优雅地结束并移动到下一个 - 逐渐(显然在不到一秒的速度)通过脚本并且只有在实际存在时才运行它们。(如您所见,问题在于脚本会因为没有地方插入其代码而被“卡住”,而且如果发生这种情况,也不会优雅地结束。
2)摆脱'onload'的东西,让每个脚本自包含,调用它自己的函数。不过,我不知道这是否能解决问题。
无论如何,一些帮助将不胜感激,因为我很难过。