Подтвердить что ты не робот

Загрузка 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 имеет что-то вроде этого.

4b9b3361

Ответ 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");