У меня проблемы с параллелизмом на веб-странице, которую я создаю. По сути, у меня есть три файла скриптов, которые я использую для хранения некоторых данных:
script1.js:
var myValue = 1;
script2.js:
var myValue = 2;
script3.js:
var myValue = 3;
И у меня есть одна страница, mypage.html , которая выглядит примерно так:
<html>
<script>
function get_number()
{
var script_file = GetQueryStringValue( "run" );
e = document.createElement('script');
e.type='text/javascript';
e.src = script_file + ".js"
head.appendChild( e );
document.write( myValue );
}
</script>
<body onload="get_number()">
<div onclick="get_number()">Click me!</div>
</body>
</html>
Основная идея этой страницы заключается в том, что вы можете запросить ее следующим образом:
mypage.html?run=script1
который сказал бы функции get_number()
динамически вставлять script1.js
в mypage.htm. Затем я вызываю get_number()
для отображения значения, загруженного из скрипта.
Теперь, я сократил вышесказанное до того, что я считаю релевантными частями, и я, очевидно, упустил кучу вещей. Мой настоящий код загружает большой массив значений и является более интересным ... Но я надеюсь, что кто-нибудь может помочь мне с этим независимо.
Я обнаружил, что в IE число отображается правильно.
В Firefox, Chrome и Safari я получаю сообщение о том, что myValue
не определено. Однако, если я нажму созданный мной Click me
div, число отобразится правильно. Итак, я знаю, что я правильно загружаю внешний файл javascript. Но он просто не загружен вовремя, чтобы моя get_number()
функция работала правильно onload
.
Теперь я немного взломал свой файл, чтобы функция get_number
выглядела так:
function get_number()
{
var script_file = GetQueryStringValue( "run" );
e = document.createElement('script');
e.type='text/javascript';
e.src = script_file + ".js"
head.appendChild( e );
setTimeout( function() { document.write( myValue ), 10 } );
}
setTimeout задерживается достаточно для обновления DOM и загрузки javascript в большинстве случаев. Но это полный взлом. Firefox стремится правильно загружать этот «улучшенный» код постоянно, в то время как Chrome и Safari удается получить значение примерно в 50% случаев.
Итак, я думаю, мне интересно, есть ли лучший способ выполнить то, что я пытаюсь сделать здесь? Очень важно, чтобы значение управлялось извне (строкой запроса), но кроме этого требования я очень гибок.