Estoy trabajando en un do-dad que puede ser incrustado en una página de un vídeo de youtube. El efecto particular quiero necesidades de jQuery para trabajar.

Quiero cargar jQuery con la condición de que algo en la página no ha añadido jQuery.

Yo, sin embargo, de las pruebas de

if (typeof($)=='function'){...

pero eso sólo funciona si jQuery se carga & corriendo por el momento la página se hace a mi script. Desde las mejores prácticas en estos días es la de incorporar usted secuencias de comandos en el pie de página, mi código de inserción que probablemente nunca vea jQuery, la mayoría del tiempo de todos modos.

Pensé en hacer la prueba onready en lugar de onload, pero la onready función está dentro de jQuery. (Supongo que me podría utilizar una secuencia de comandos independiente? hay uno bueno?)

Por último, a pesar de las pruebas para jQuery después de un tiempo de espera de retraso, pero esto parece poco elegante en el mejor y poco fiable, en el peor.

Los pensamientos?

«if (typeof($)=='object'){...« Que no funciona en absoluto. El typeof $ debe ser «función», y no «objeto». También me gustaría comprobar jQuery, no $, en caso de que noConflict está siendo utilizado. (Tenga en cuenta también que typeof es un operador, no una función, sin necesidad de paréntesis alrededor de su operando, a menos que su operando es algunos complicado expresión…aunque hay un poco de daño en ellos.)
Crowder: Bueno, caramba caramba, jquery es una función! el cambio de mi post ahora…

OriginalEl autor Trass Vasston | 2011-03-03

3 Comentarios

  1. 8

    Dadas sus limitaciones, yo sólo veo dos opciones:

    1. Uso window.load evento:

      (function() {
          if (window.addEventListener) {
              //Standard
              window.addEventListener('load', jQueryCheck, false);
          }
          else if (window.attachEvent) {
              //Microsoft
              window.attachEvent('onload', jQueryCheck);
          }
          function jQueryCheck() {
              if (typeof jQuery === "undefined") {
                  //No one's loaded it; either load it or do without
              }
          }
      })();

      window.load sucede muy tarde en el ciclo de carga, a pesar de que, después de todas las imágenes son y tal cargado.

    2. Uso del tiempo de espera. La buena noticia es que el tiempo de espera puede probablemente ser bastante corto.

      (function() {
          var counter = 0;
      
          doDetect();
          function doDetect() {
              if (typeof jQuery !== "undefined") {
                  //...jQuery has been loaded
              }
              else if (++counter < 5) { //5 or whatever
                  setTimeout(doDetect, 10);
              }
              else {
                  //Time out (and either load it or don't)
              }
          }
      })();

      Tendrás que afinar para decidir los mejores valores para el contador y el intervalo. Pero si de jQuery no se carga incluso en la primera o en segunda vuelta, supongo (no probado) es que no va a ser cargado…a menos que alguien más está haciendo lo que estás haciendo. 🙂

    OriginalEl autor T.J. Crowder

  2. 2

    Puede utilizar window.onload. Esto desencadena después de domReady, así jQuery, seguramente serán cargados por este punto.

    Y comprobar jQuery, no $. A veces la gente a usar jQuery con otras librerías y uso $ para algo diferente.

    Sin embargo, en mi humilde opinión, no creo que sea una gran cosa si jQuery se carga dos veces.

    OriginalEl autor gilly3

  3. 1

    He estado usando este código para hacer esto por un tiempo ahora. También se comprueba un mínimo la versión de jQuery (en nuestro caso, seguimos utilizando la 1.4.2) antes de la carga:

    /* Checks if JQuery is loaded... if not, load it. */
    /* Remember to update minimum version number when updating the main jquery.min.js file. */
    
    if (typeof jQuery != 'undefined') {
        /* jQuery is already loaded... verify minimum version number of 1.4.2 and reload newer if needed */
        if (/1\.(0|1|2|3|4)\.(0|1)/.test(jQuery.fn.jquery) || /^1.1/.test(jQuery.fn.jquery) || /^1.2/.test(jQuery.fn.jquery)|| /^1.3/.test(jQuery.fn.jquery)) {
            loadJQ();
        }
    } else {
        loadJQ();
    }
    
    /* loads jQuery if not already loaded, or if not a recent enough version */
    function loadJQ() {
        /* adds a link to jQuery to the head, instead of inline, so it validates */ 
        var headElement = document.getElementsByTagName("head")[0];
        linkElement=document.createElement("script");
        linkElement.src="../scripts/lib/jquery.min.js";
        linkElement.type="text/javascript";
        headElement.appendChild(linkElement);
    }
    Él dijo: «incluso si jQuery es // después de la detección de secuencia de comandos». Y luego se pasa sobre ella en el texto. Es claramente una parte importante de lo que él está pidiendo.
    Gracias… debo de haber perdido ese detalle.

    OriginalEl autor Lelando

Dejar respuesta

Please enter your comment!
Please enter your name here