jQuery in eine Seite injizierenden schlägt fehl, wenn die Verwendung von Google AJAX Libraries API

StackOverflow https://stackoverflow.com/questions/840240

Frage

Ich mag jQuery in einer Seite mit dem Google AJAX Libraries API injizieren, ich habe mit der folgenden Lösung kommen:

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();
  }
})());

Das Skript würde dann in einer Seite auf einer separaten Domäne aufgenommen werden:

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>

In Firefox 3 bekomme ich folgende Fehlermeldung:

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

Der Fehler tritt auf die Google AJAX Libraries API spezifisch zu sein, da ich andere haben gesehen, eine jQuery Bookmarklet verwenden jQuery in die aktuelle Seite zu injizieren. Meine Frage:

  • Gibt es eine Methode, um die Google AJAX Libraries API zur Injektion / jQuery in eine Seite, unabhängig von der onload / onready Zustand?
War es hilfreich?

Lösung

Wenn Sie die Injektion, ist es wahrscheinlich einfacher, das Skript zu verlangen, ohne dass die Google-Loader:

(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 );
})()

Andere Tipps

fand ich diesen Beitrag, nachdem wir eine andere Lösung herausgefunden. Also aus irgendeinem Grunde, wenn Sie nicht die akzeptierten Lösung verwenden, dies scheint gut zu funktionieren:

<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>

Ein Problem mit der akzeptierten Lösung ist, dass Sie alle Ihre Codes zu setzen sind gezwungen, die Sie auf der Seite in der Callback-Funktion ausgeführt werden sollen. Also alles, was jQuery (wie Plugins) benötigt müssen aus dieser Funktion aufgerufen werden. AND, alle anderen enthalten JS-Dateien, die jQuery benötigen, sind abhängig von jQuery, bevor alle anderen Skripten Feuer geladen werden.

Ich habe es funktioniert !!!!! Habe ich es aus, indem sie in der Anwendung Spielplatz suchen ....

Hier ist die Hülle mit Jquery starten .... eine Benachrichtigung in der Funktion setzen, um es zu sehen arbeitet

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

function OnLoad(){
    $(function(){

    });
}

google.setOnLoadCallback(OnLoad);

Sie können weniger schmerzhafte Lösung jquery (die neueste stabile Version verfügbar) zu einem beliebigen Seite zu injizieren.

jQuerify - Chrome-Erweiterung verwendet jQuery (die neueste stabile Version zu injizieren verfügbar ) in jede Web-Seite (auch HTTPS) "

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top