2013-07-26 2 views
0

У нас есть динамический рекламный блок, который загружается на веб-сайты через Google Double Click.Использование javascript для создания ссылки JQuery

Мы используем некоторые JQuery в коде, так как часть настройки мы проверяем, работает ли сайт JQuery, и если мы не используем Javascript для добавления ссылки на наш файл Jquery.

Это делается отлично, но я все еще получаю сообщение об ошибке «Неподготовленный ReferenceError: jQuery не определен» Я предполагаю, что это связано с тем, что вещи загружаются, но я не уверен, как обойти проблема. Все работает нормально, если вы обновляете страницу, проблема только возникает при первой загрузке.

Также, если я открываю новое окно браузера и загружаю страницу во второй раз, все работает нормально.

Вот код, который мы используем, чтобы добавить теги сценария к голове:

if(!window.jQuery) 
{ 

    var fm_j = document.createElement('script'); fm_j.type = 'text/javascript'; 
    fm_j.src = 'js/jquery-1.8.3.min.js'; 
    document.getElementsByTagName('head')[0].appendChild(fm_j); 
} 
+0

Вы добавляете КДС ?? –

+3

_ «мы проверяем, работает ли сайт JQuery, и если мы не используем Javascript для добавления ссылки на наш файл JQuery» _ - Это мудро? Что делать, если на странице уже есть jQuery, поэтому вы не добавляете свой собственный, но уже включенная версия слишком старая или новая, чтобы быть совместимой с вашим кодом? – nnnnnn

+1

use typeof, 'if (typeof (jQuery) ===" undefined ")' –

ответ

6

Это вопрос времени. Когда вы динамически загружаете сценарии, они загружаются асинхронно и не блокируют дальнейшее выполнение javascript на странице. Это означает, что jQuery не может быть загружен к моменту запуска вашего конкретного кода jQuery.

Когда вы обновляете, js/jquery-1.8.3.min.js, вероятно, был кеширован и поэтому будет загружаться быстрее, поэтому вы не увидите ошибок.

Решение состоит в том, чтобы превратить ваш javascript в функцию, которая вызывается после загрузки jQuery с помощью обработчика события load. Вот пример, который я адаптировал от this tutorial.

working example.

function getScript(success) { 

    var fm_j = document.createElement('script'); 
     fm_j.type = 'text/javascript'; 
     fm_j.src = 'js/jquery-1.8.3.min.js', 
     done = false; 

    // Attach handlers for all browsers 
    fm_j.onload = fm_j.onreadystatechange = function() { 
     if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { 

      done = true; 
      // callback function provided as param 
      success(); 
     }; 
    }; 

    document.getElementsByTagName('head')[0].appendChild(fm_j); 
}; 

if(!window.jQuery) { 
    getScript(doSomething); 
} else { 
    doSomething(); 
} 

Кроме того, как несколько commentors отметил, многие сайты место баннеров внутри фреймов, чтобы сохранить объявления от «загрязняющего» на странице с их библиотеками.

Смежные вопросы