2013-03-04 3 views
1

Добрый день всем, у меня есть уникальная ситуация, когда я пытаюсь загрузить javascript в определенном порядке. Похоже, что браузеры запрашивают javascript с сервера несколькими файлами за один раз. Моя проблема в том, что мне нужно загрузить, что устанавливает куки-файл, тогда мне нужен второй. Это нужно проверить и посмотреть, включены ли сторонние файлы cookie. И в зависимости от того, являются они или нет, они будут скрывать или отображать элементы DOM, в частности скрывать iFrame и отображать окно, в котором говорится, что им необходимо включить сторонние файлы cookie или иметь ссылку, на которую они могут щелкнуть.загрузка (запрос) javascript в определенном порядке

У меня есть приложение .net MVC, в котором есть контроллер и 2 действия. Действие 1 называется setcookie, ничего не возвращает, но устанавливает cookie.

Второе действие называется ValidateCookie, которое проверяет, отправлено ли cookie или нет, и возвращает функцию Javascript, возвращающую true или false. Проблема, хотя иногда браузеры будут вызывать ValidateCookie до setcookie. Я проверил это с помощью скрипача. Но это не всегда, обычно это называется в правильном порядке. Возможно, 1 из 10 назад.

Я попытался поставить SetCookie в голову и проверить в конце тела. Установите в верхней части тела, подтвердите в конце, как в конце, используя тег ссылки для вызова setcookie, используя тег img, используя CSS @import. Установка defer = none. Я просто не могу заставить его загружать javascripts в правильном порядке. Поскольку это не в правильном порядке, очень возможно, что функция результата cookie вернет false, даже если они активируют их.

Я нашел несколько решений, которые имеют первый вызов javascript, который динамически добавляет второй тег сценария в html. Все хорошо в хорошем состоянии, за исключением того, что мне нужны эти 2 javascripts, загруженные до того, как все будет продолжаться. И динамически добавленные теги скриптов загружаются после завершения всех остальных скриптов.

Возможно, это просто невозможно, потому что все дело в загрузке нескольких файлов одновременно.

ответ

2

Единственный способ, по которому вы можете сделать cookie из первого скрипта, отправляться на сервер, когда второй скрипт является requeste, заключается в том, что вы вручную загружаете второй скрипт после того, как первый установил файл cookie. Вы не можете полагаться на теги <script>, чтобы сделать это для вас, потому что браузеру разрешено выполнять предварительную выборку сценариев, даже если они будут исполнены в теге <script>.

Итак, последовательность событий будет таким:

  1. Первые грузы сценария и выполняет.
  2. Cookie установлен.
  3. Второй скрипт динамически добавляется в документ.

Вам также необходимо убедиться, что второй скрипт не кэширован, возможно, добавив уникальный аргумент в конец URL-адреса (обычно это отметка даты и времени).

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

Вот пример (firstscript.js устанавливает куки, он отправляется на сервер при запросе secondscript.js):

<script src="firstscript.js"></script> 
<script> 
(function() { 
    var dynScript = document.createElement("script"); 
    var now = new Date().getTime(); 
    dynScript.src = "secondscript.js?ts=" + now; 
    document.getElementsByTagName("head")[0].appendChild(dynScript); 
})(); 
</script> 
+0

Это довольно много, вывод я пришел.Это означает переосмысление всех сценариев и включение их в onload или использование jquery или другой библиотеки. Я надеялся, что с ним все будет в порядке. – Edward

+0

@Edward - тривиально загружать сценарий динамически (например, четыре строки кода). Для этого вам не нужна библиотека. Вы можете знать, когда первый скрипт выполняется, просто полагаясь на последовательное выполнение скриптов. – jfriend00

+0

@Edward - пример кода, добавленный в мой ответ. – jfriend00