2009-05-08 4 views
4

Я хотел бы, чтобы придать Jquery на страницу с помощью API Google AJAX Libraries, я придумал следующее решение:Инъекционное Jquery на страницу не удается при использовании Google AJAX Libraries API

http://my-domain.com/inject-jquery.js:

;((function(){ 

    // Call this function once jQuery is available 
    var func = function() { 
    jQuery("body").prepend('<div>jQuery Rocks!</div>'); 
    }; 

    // Detect if page is already using jQuery 
    if (!window.jQuery) { 
    var done = false; 
    var head = document.getElementsByTagName('head')[0]; 
    var script = document.createElement("script"); 
    script.src = "http://www.google.com/jsapi"; 
    script.onload = script.onreadystatechange = function(){ 

     // Once Google AJAX Libraries API is loaded ... 
     if (!done && (!this.readyState || this.readyState == "loaded" || this.readyState == "complete")) { 

     done = true; 

     // ... load jQuery ... 
     window.google.load("jquery", "1", {callback:function(){ 

      jQuery.noConflict(); 

      // ... jQuery available, fire function. 
      func(); 
     }}); 

     // Prevent IE memory leaking 
     script.onload = script.onreadystatechange = null; 
     head.removeChild(script); 
     } 
    } 

    // Load Google AJAX Libraries API 
    head.appendChild(script); 

    // Page already using jQuery, fire function 
    } else { 
    func(); 
    } 
})()); 

сценарий затем будет включен в страницу на отдельном домене:

http://some-other-domain.com/page.html:

<html> 
    <head> 
    <title>This is my page</title> 
    </head> 
    <body> 
    <h1>This is my page.</h1> 
    <script src="http://my-domain.com/inject-jquery.js"></script> 
    </body> 
</html> 

В Firefox 3 я получаю следующее сообщение об ошибке:

Module: 'jquery' must be loaded before DOM onLoad! jsapi (line 16) 

появляется ошибка быть специфическими для API Google AJAX Libraries, как я видел, как другие используют букмарклет JQuery, чтобы ввести в JQuery текущую страницу. Мой вопрос:

  • Есть ли способ для инъекции API/jQuery библиотек Google AJAX на страницу независимо от состояния onload/onready?

ответ

14

Если вы инъекционные, это, вероятно, проще запросить сценарий без использования загрузчика Google:

(function() { 
    var script = document.createElement("script"); 
    script.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"; 
    script.onload = script.onreadystatechange = function(){ /* your callback here */ }; 
    document.body.appendChild(script); 
})() 
+0

Гораздо более прямой метод, вы знаете, если есть статический URL на серверах Google, что точки к последнему jQuery? –

+1

http://code.google.com/apis/ajaxlibs/documentation/ имеет URL-адреса для jQuery – artlung

+2

использовать http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min .js, чтобы получить последний оборот текущей версии. –

2

Я нашел этот пост после того, как мы выяснили, другое решение. Так по какой-то причине, если вы не можете использовать принятое решение, это один, кажется, работает хорошо:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript"> 
    if (typeof jQuery == 'undefined') { 
     // jQuery hasn't been loaded... so let's write it into the head immediately. 
     document.write('<script type="text/javascript" src="/jquery-1.3.2.min.js"><\/script>') 
     } 
</script> 

Один из вопросов, с принятым решением является то, что вы вынуждены поместить весь код, который вы хотите запустите на странице функцию обратного вызова. Поэтому все, что требует jQuery (например, плагины), нужно вызывать из этой функции. И, все ваши другие JS-файлы, которые требуют jQuery, зависят от загружаемого jQuery ДО ТОГО, как все остальные сценарии срабатывают.

1

У меня есть работа !!!!! Я понял это, глядя на детской площадке приложения ....

Вот обертка, чтобы начать использовать JQuery .... Поместите предупреждение в функции, чтобы увидеть его работу

google.load("jquery", "1.4.2"); 

function OnLoad(){ 
    $(function(){ 

    }); 
} 

google.setOnLoadCallback(OnLoad); 
1

Вы можете использовать менее болезненное решение для инъекции jquery (последняя версия стабильной версии) на любую страницу.

jQuerify - расширение Chrome используется для инъекционные Jquery (последняя стабильная версия доступна) в любой веб-страницы (даже HTTPS)»