document.createElement (“сценарий”) синхронно

Действительно ли возможно звонить в a .js зарегистрировать синхронно и затем использовать его сразу позже?

<script type="text/javascript">
    var head = document.getElementsByTagName('head').item(0);
    var script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.setAttribute('src', 'http://mysite/my.js');
    head.appendChild(script);

    myFunction(); // Fails because it hasn't loaded from my.js yet.

    window.onload = function() {
        // Works most of the time but not all of the time.
        // Especially if my.js injects another script that contains myFunction().
        myFunction();
    };
</script>

Это упрощено. В моей реализации материал createElement находится в функции. Я думал о добавлении чего-то к функции, которая могла проверить, чтобы видеть, инстанцировали ли определенная переменная перед возвращением управления. Но затем существует все еще проблема того, что сделать, когда включая js от другого сайта, что я не имею никакого контроля.

Мысли?

Править:

Я принял лучший ответ на данный момент, потому что он дает хорошее объяснение того, что продолжается. Но если у кого-либо есть какие-либо предложения для того, как улучшить это, я открыт для них. Вот пример того, что я хотел бы сделать.

// Include() is a custom function to import js.
Include('my1.js');
Include('my2.js');

myFunc1('blarg');
myFunc2('bleet');

Я просто хочу удержаться от необходимости знать внутренности слишком много и просто смочь сказать, "Я хочу использовать этот модуль, и теперь я буду использовать некоторый код от него".

73
задан Josh Johnson 14 July 2010 в 20:39
поделиться

4 ответа

Вы можете создать элемент