Существует обходное решение, которое не совсем то, что вам нужно, но позволяет вам практически не реагировать на прикосновение к скриптлетам весьма минимальным образом. Вы можете использовать скриптлет, чтобы поместить значение в переменную 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>
Есть ли способ убедиться, что оба скрипта загружаются, прежде чем я использую их в своем application.js?
Файлы JavaScript должны загружаться последовательно и блокировать , поэтому, если скрипты, от которых вы зависите, не делают что-то необычное, все, что вам нужно, это загружать application.js после других файлов.
Неблокирующая загрузка JavaScript содержит некоторую информацию о том, как загружаются скрипты (и обсуждаются некоторые методы для снятия блокировки).
в 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>
междоменные скрипты загружаются после скриптов самого сайта, поэтому вы получаете ошибки. Интересно, что здесь никто не знает.
У меня была похожая проблема, только с одним скриптом. Решение, которое я придумал, состояло в том, чтобы использовать 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);
}
Я надеюсь, что это может помочь кому-то в будущем.
Есть ли способ убедиться, что оба скрипта загружаются, прежде чем я их использую?
Да.
Поместите код, который вы хотите загрузить последним (ваш application.js
материал), в прототип document.observe . Это должно гарантировать, что код будет загружаться только после того, как прототип + другие вещи будут закончены и готовы. (Если вы знакомы с jQuery, эта функция похожа на jQuery $(document).ready
)
Вы имеете в виду, что 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, требующей обновления тем для подписки. Я буду продолжать искать, но спасибо за устранение этой возможной причины.
AMQ зависит от прототипа, который консоль ошибок в FireFox сообщает, что объект не определен.
Вы имеете в виду, что AMQ зависит от библиотеки прототипов ? Я не вижу импорта этой библиотеки в предоставленном вами коде.
Вы также можете использовать встроенный в JavaScript метод javascript, чтобы контролировать выполнение ваших скриптов;
_spBodyOnLoadFunctionNames.push("yourFunction");