Заставить мой пользовательский скрипт ждать загрузки других скриптов

[ Изменить: Я заменяю исходный запутанный вопрос упрощенным примером, демонстрирующим проблему.]

Справочная информация

Я пытаюсь написать пользовательский скрипт, который будет работать в Chrome.Этот скрипт должен вызвать функцию JavaScript AlertMe () , которая находится за пределами пользовательского скрипта - эта функция является частью страницы и содержит переменные, которые динамически генерируются на стороне сервера, поэтому это не так. возможно переписать эту функцию в моем юзерскрипте.

Код

Скрипт на странице ( посетить страницу ):

<script type="text/javascript">
    function AlertMe()
    {
        alert("Function AlertMe was called!");
        // then do stuff with strings that were dynamically generated
        // on the server so that I can't easily rewrite this into the userscript
    }
</script>

Мой пользовательский скрипт ( установить в Chrome ):

function tryAlert()
{
    if (typeof AlertMe == "undefined") {
        console.log('AlertMe is undefined.');
        window.setTimeout(tryAlert, 100);
    }
    else {
        AlertMe();
    }
}

tryAlert();

Проблема

Когда Я попытался просто вызвать функцию, консоль Chrome сообщила мне, что AlertMe не определен . Думая, что это произошло из-за того, что мой пользовательский скрипт был запущен до загрузки всех других скриптов, я использовал setTimeout , чтобы дождаться определения функции AlertMe .

К сожалению, если вы установите сценарий, а затем посетите страницу, вы увидите, что это просто выводит AlertMe is undefined. навсегда и никогда не вызывает функцию. Если вы наберете typeof AlertMe в консоли Chrome, он правильно ответит "function" , так почему мой пользовательский скрипт всегда считает, что AlertMe не определено?

7
задан Michael Martin-Smucker 23 February 2011 в 16:53
поделиться