2014-02-14 4 views
0

Чтобы добавить сценарий динамически, нам нужно создать элемент сценария и добавить свойство src элемента сценария и, наконец, добавить элемент сценария в тег заголовка (или любой другой тег). Но поведение синхронно, и страница блокируется до полного загрузки javascript. Я хочу знать, есть ли какая-нибудь возможная работа, по которой я могу встроить javascript асинхронно, не используя xhr.Как добавить javascript на кнопку click async

var script = document.createElement('script'); 
script.type = 'text/javascript'; 
script.src = 'urlofthescript'; 
$("#someElement").append(script); 
//the above line blocks the UI until it gets loaded. Why? 

ответ

0

<script src="..."> тег всегда будет синхронным, если вы не используете async attribute. Но если вы вставляете <script>code goes here</script>, выполнение начинается без задержки (как только вы откажетесь от потока JS). Поэтому создайте свой код в строке или загрузите его через AJAX, затем document.createTextNode(code), document.createElement('script'), appendChild код в скрипт, затем скрипт на документ. Другая возможность - использовать некоторые превосходные модульные системы, которые появились в последнее время, такие как RequireJS, которые определяют все это для вас.

+0

Я хотел бы спросить, если мой скрипт для сценария занимает несколько секунд (10 секунд) для визуализации скрипта, тогда пользовательский интерфейс блокируется в течение следующих 10 секунд. Можно ли удалить атрибут async? –

+0

А также, как указано, я не хочу использовать какую-либо другую библиотеку, например requirejs, для ее реализации. Никакие xhr методы также не разрешены. –

+0

Что значит «визуализировать сценарий»? Вы имеете в виду выполнить его? Или загрузить его? Script * loading * может быть асинхронным, используя 'async' в браузерах, которые его поддерживают, по ссылке. Скрипт * исполнение * никогда не может быть асинхронным, если вы не напишете его так, чтобы он периодически отказывался от управления потоком JS. – Amadan

Смежные вопросы