Это немного странный случай использования, но у меня есть причины:
Я бы хотел написать
<script type="text/javascript" src="first.js"></script>
<script type="text/javascript" src="second.js"></script>
в моей разметке и, используя код в first.js, предотвратить или отсрочить выполнение second.js. Возможно ли это в любом браузере? Что делать, если содержимое first.js является встроенным? (Если это помогает, предположим, что второй тег script имеет атрибут id.)
Поскольку у меня есть несколько ответов, которые пропустили то, что я получаю, я должен уточнить:
- Решение должно быть полностью в пределах
first.js. Все, что требует изменения исходного HTML-страницы илиsecond.js, неприемлемо. - Допустимо загрузить
second.jsчерез Ajax и выполнить его с помощьюeval. Это легкая часть. Жесткая часть предотвращает немедленное выполнениеsecond.js. - Предположим, что вы не знаете, что в
second.js. Таким образом, вы не можете просто заменить каждую глобальную функцию, называемуюsecond.jsфункцией no-op. (Кроме того, это почти наверняка приведет к ошибкам.)
Если вы знаете о решении, которое работает в некоторых браузерах, но не в других, я бы хотел его услышать.
Пример. Чтобы сделать это более конкретным, скажем, что код
<script type="text/javascript">
function func() {
window.meaningOfLife = 42;
window.loadSecond();
};
setTimeout(func, 10);
</script>
предшествует двум script включает, и что second.js содержит строку
if (window.meaningOfLife !== 42) {throw new Error();}
first.js должен быть в состоянии предотвратить эту ошибку, задерживая second.js от выполнения до тех пор, пока не будет запущен window.loadSecond. (Предположим, что реализация window.loadSecond также находится в first.js.) До не можно коснуться window.meaningOfLife.
Обновить. Ответ Alohci отвечает этим требованиям, но только при условии, что второй тег script появляется сразу после первого, без пробелов между ними. Если кто-то может расширить свой хак, чтобы избежать этого требования, не внося никаких других нежелательных последствий, это было бы удивительно...