Порядок загрузки JavaScript

Существует обходное решение, которое не совсем то, что вам нужно, но позволяет вам практически не реагировать на прикосновение к скриптлетам весьма минимальным образом. Вы можете использовать скриптлет, чтобы поместить значение в переменную JSTL и использовать чистый код JSTL позже на странице.

<%@ taglib prefix="c"       uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.whichever.namespace.Addresses" %>
<c:set var="ourUrl" value="<%=Addresses.URL%>"/>
<c:if test='${"http://www.google.com" eq ourUrl}'>
   Google is our URL!
</c:if>
29
задан ekad 6 March 2018 в 07:23
поделиться

8 ответов

Есть ли способ убедиться, что оба скрипта загружаются, прежде чем я использую их в своем application.js?

Файлы JavaScript должны загружаться последовательно и блокировать , поэтому, если скрипты, от которых вы зависите, не делают что-то необычное, все, что вам нужно, это загружать application.js после других файлов.

Неблокирующая загрузка JavaScript содержит некоторую информацию о том, как загружаются скрипты (и обсуждаются некоторые методы для снятия блокировки).

27
ответ дан Walter Rumsby 6 March 2018 в 07:23
поделиться

в jquery вы можете использовать:

$(document).ready(function(){/*do stuff here*/});

, который гарантирует, что javascript загружен и dom готов, прежде чем делать ваши вещи.

в прототипе похоже, что это может сработать

document.observe("dom:loaded", function() {/*do stuff here*/});

Если я правильно понимаю вашу проблему ... Я думаю, что это может помочь ..

Если вы не хотите полагаться на библиотеку, чтобы сделать это ... Я думаю, что это может сработать:

<script>
   function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>
9
ответ дан danb 6 March 2018 в 07:23
поделиться

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

44
ответ дан John Doe 6 March 2018 в 07:23
поделиться

У меня была похожая проблема, только с одним скриптом. Решение, которое я придумал, состояло в том, чтобы использовать addEventListener("load",fn,false) для объекта script, созданного с помощью document.createElement('script'). Вот последняя функция, которая загружает любой стандартный файл JS и позволяет добавить сценарий «после загрузки».

function addJavaScript( js, onload ) {
   var head, ref;
   head = document.getElementsByTagName('head')[0];
   if (!head) { return; }
   script = document.createElement('script');
   script.type = 'text/javascript';
   script.src = js;
   script.addEventListener( "load", onload, false );
   head.appendChild(script);
}

Я надеюсь, что это может помочь кому-то в будущем.

7
ответ дан cmcginty 6 March 2018 в 07:23
поделиться

Есть ли способ убедиться, что оба скрипта загружаются, прежде чем я их использую?

Да.

Поместите код, который вы хотите загрузить последним (ваш application.js материал), в прототип document.observe . Это должно гарантировать, что код будет загружаться только после того, как прототип + другие вещи будут закончены и готовы. (Если вы знакомы с jQuery, эта функция похожа на jQuery $(document).ready)

3
ответ дан Alexander Elgin 6 March 2018 в 07:23
поделиться

Вы имеете в виду, что AMQ зависит от библиотеки прототипов? Я не вижу импорта этой библиотеки в предоставленном вами коде.

Да для javascript ActiveMQ (amq.js) зависит от прототипа. В amq.js он загружает 3 скрипта: _amq.js, поведениеi.js и prototype.js.

Спасибо за вашу помощь по поводу порядка загрузки JavaScript. Это говорит мне о том, что моя ошибка в другом замке: (

Я думаю, у меня другая проблема. Я также проверил js-файлы с ActiveMQ 5.0 до 5.1 и заметил, что они тоже были. Что-то изменилось в С версии 5.0 до 5.1, требующей обновления тем для подписки. Я буду продолжать искать, но спасибо за устранение этой возможной причины.

2
ответ дан Bernie Perez 6 March 2018 в 07:23
поделиться

AMQ зависит от прототипа, который консоль ошибок в FireFox сообщает, что объект не определен.

Вы имеете в виду, что AMQ зависит от библиотеки прототипов ? Я не вижу импорта этой библиотеки в предоставленном вами коде.

2
ответ дан Walter Rumsby 6 March 2018 в 07:23
поделиться

Вы также можете использовать встроенный в JavaScript метод javascript, чтобы контролировать выполнение ваших скриптов;

_spBodyOnLoadFunctionNames.push("yourFunction");
0
ответ дан Brian Scott 6 March 2018 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: