Загрузка JavaScript
Привет, я работаю с amq.js (ActiveMQ) и Карты Google. Я загружаю свои скрипты в этом порядке
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>AMQ & Maps Demo</title>
<!-- Stylesheet -->
<link rel="stylesheet" type="text/css" href="style.css"></link>
<!-- Google APIs -->
<script type="text/javascript" src="http://www.google.com/jsapi?key=abcdefg"></script>
<!-- Active MQ -->
<script type="text/javascript" src="amq/amq.js"></script>
<script type="text/javascript">amq.uri='amq';</script>
<!-- Application -->
<script type="text/javascript" src="application.js"></script>
</head>
Однако в моем приложении application.js он загружает Карты, но я получаю сообщение об ошибке при попытке подписаться на тему с AMQ. AMQ зависит от прототипа, который консоль ошибок в Firefox говорит, что объект не определен. Я думаю, что у меня проблема с использованием объекта amq до завершения загрузки script. Есть ли способ убедиться, что оба скрипта загружаются до того, как я их использую в своем приложении application.js?
У Google этот приятный вызов функции google.setOnLoadCallback(initialize);
, который отлично работает. Я не уверен, что amq.js имеет что-то вроде этого.
Ответы
Ответ 1
Есть ли способ убедиться, что оба сценария загружаются до того, как я их использую в своем приложении application.js?
Файлы JavaScript должны загружаться последовательно и блокироваться, поэтому если скрипты, которые вы в зависимости от того, делаете что-то необычное, все, что вам нужно сделать, это загрузить application.js после других файлов.
Неблокирующие загрузки JavaScript содержит некоторую информацию о загрузке скриптов (и обсуждает некоторые методы, чтобы подорвать блокировку).
Ответ 2
междоменные скрипты загружаются после скриптов самого сайта, поэтому вы получаете ошибки. интересно, никто этого не знает.
Ответ 3
в jquery вы можете использовать:
$(document).ready(function(){/*do stuff here*/});
который гарантирует загрузку javascript, и dom готов, прежде чем делать ваши вещи.
в прототипе похоже, что это может сработать
document.observe("dom:loaded", function() {/*do stuff here*/});
Если я правильно понимаю вашу проблему, я думаю, что это может помочь.
Если вы не хотите полагаться на lib, чтобы сделать это... Я думаю, что это может сработать:
<script>
function doIt() {/*do stuff here*/}
</script>
<body onLoad="doIt();"></body>
Ответ 4
У меня была схожая проблема, только с одним script. Решение, с которым я столкнулся, состояло в том, чтобы использовать addEventListener("load",fn,false)
для объекта script
, созданного с помощью document.createElement('script')
. Вот последняя функция, которая загружает любой стандартный JS файл и позволяет добавить "пост-загрузку" script.
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);
}
Я надеюсь, что это может помочь кому-то в будущем.
Ответ 5
Есть ли способ убедиться, что оба скрипта загружаются до того, как я их использую?
Да.
Поместите код, который вы хотите загрузить последним (ваш материал application.js) в прототип document.observe. Это должно гарантировать, что код загрузится только после того, как прототип + другой материал будет готов и готов. (Если вы знакомы с jQuery, эта функция похожа на jQuery $(document).ready)
Ответ 6
AMQ зависит от прототипа, который консоль ошибок в FireFox говорит, что объект не определен.
Вы имеете в виду, что AMQ зависит от библиотеки прототипов? Я не вижу импорт для этой библиотеки в коде, который вы предоставили.
Ответ 7
Вы имеете в виду, что AMQ зависит от Библиотека прототипов? Я не вижу импортировать эту библиотеку в код вы предоставили.
Да для ActiveMQ javascript (amq.js) зависит от прототипа. В amq.js он загружает 3 скрипта, _amq.js, behaviour.js и prototype.js.
Благодарим вас за помощь в загрузке JavaScript. Это говорит мне, что моя ошибка находится в другом замке: (
Я думаю, у меня другая проблема. Я также проверил файлы js от ActiveMQ 5.0 до 5.1 и заметил, что они были такими же. Что-то изменилось с 5.0 на 5.1, что требует обновления тем для подписки. Я буду продолжать искать, но спасибо за устранение этой возможной причины.
Ответ 8
Вы также можете использовать встроенный метод JavaScript javascript для управления выполнением ваших скриптов;
_spBodyOnLoadFunctionNames.push("yourFunction");