[ Редактировать: Я заменяю оригинальный, запутанный вопрос упрощенным примером, демонстрирующим проблему.]
Фон
Iпытаюсь написать usercript, который будет работать в 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>
Мойuserscript ( установить его в Chrome ):
function tryAlert()
{
if (typeof AlertMe == "undefined") {
console.log('AlertMe is undefined.');
window.setTimeout(tryAlert, 100);
}
else {
AlertMe();
}
}
tryAlert();
Проблема
Когда я попытался просто вызвать функцию, консоль Chrome позволила мнезнаю, что AlertMe is not defined
.Думая, что это произошло из-за того, что мой пользовательский скрипт выполнялся до загрузки всех других скриптов, я использовал setTimeout
, чтобы дождаться определения функции AlertMe
.
К сожалению, если вы установите скрипт, а затем посетите страницу, вы увидите, что он просто выводит AlertMe is undefined.
навсегда и никогда не вызывает функцию.Если вы наберете typeof AlertMe
в консоли Chrome, он будет правильно отвечать "function"
, так почему мой пользовательский скрипт всегда думает, что AlertMe
не определен?