Вопрос

Я работаю с обоими 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 до завершения загрузки скрипта. Есть ли способ убедиться, что обе загружать скрипты, прежде чем я использую их в своей application.js?

У Google есть такая приятная функция call google.setOnLoadCallback(initialize); что отлично работает.Я не уверен, что у amq.js есть что-то подобное.

Это было полезно?

Решение

Есть ли способ убедиться, что обе загружать скрипты, прежде чем я использую их в своей 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) к a script объект, созданный с помощью document.createElement('script') Вот последняя функция, которая загружает любой стандартный JS-файл и позволяет вам добавить скрипт "post load".

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 материал) в прототип документируйте.соблюдайте.Это должно гарантировать, что код загрузится только после того, как prototype + другие материалы будут закончены и готовы.(Если вы знакомы с jQuery, то эта функция аналогична jQuery $(document).ready )

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

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

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

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

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

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

Вы также можете использовать встроенный в SharePoint метод JavaScript для управления выполнением ваших сценариев;

_spBodyOnLoadFunctionNames.push("yourFunction");
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top