1039 votes

Meilleure façon d’utiliser Google ' s a accueilli jQuery, mais chute à ma bibliothèque hébergé sur Google fail

Ce serait un bon moyen de tenter de charger le hébergé jQuery sur Google (ou autre Google hébergé libs), mais la charge de ma copie de jQuery si Google tentative échoue?

Je ne dis pas que Google est feuilletée. Il y a des cas où la Google copie est bloqué (apparemment en Iran, par exemple).

Aurais-je configurer un minuteur et de vérifier l'objet jQuery?

Quel serait le danger des deux copies à venir à travers?

Pas vraiment à la recherche de réponses comme "il suffit d'utiliser la Google" ou "simplement utiliser votre propre." Je comprends ces arguments. Je comprends aussi que l'utilisateur est susceptible d'avoir la version de Google mis en cache. Je suis en train de réfléchir de base pour le cloud en général.


Edit: Cette partie ajoutée...

Depuis que Google suggère d'utiliser google.charger pour charger les bibliothèques ajax, et il effectue un rappel quand c'est fait, je me demande si c'est la clé de la sérialisation de ce problème.

Je sais que cela semble un peu fou. Je suis juste essayer de comprendre si on peut le faire de manière fiable ou pas.


Mise à jour: jQuery maintenant hébergé sur Microsoft CDN.

http://www.asp.net/ajax/cdn/

821voto

Rony Points 6340

Vous pouvez y parvenir comme ceci :

Ceci devrait être dans votre page et tous les gestionnaires d’événement ready jQuery doivent être dans le pour éviter les erreurs (même si elle n’est pas infaillible !).

Une raison de plus pour la non utilisation de jQuery hébergé par Google, c’est que dans certains pays, nom de domaine de Google est interdit.

337voto

BenjaminRH Points 4540

La façon plus simple et la plus propre de faire cela de loin :

76voto

artlung Points 13433

Cela semble fonctionner pour moi:

<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
// has the google object loaded?
if (window.google && window.google.load) {
    google.load("jquery", "1.3.2");
} else {
    document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>');
}
window.onload = function() {
    $('#test').css({'border':'2px solid #f00'});
};
</script>
</head>
<body>
    <p id="test">hello jQuery</p>
</body>
</html>

La façon dont cela fonctionne est d'utiliser l' google objet de l'appel http://www.google.com/jsapi les charges sur l' window objet. Si cet objet n'est pas présent, nous sommes en supposant que l'accès à Google est un échec. Si c'est le cas, nous charger une copie locale à l'aide de document.write. (Je suis sur mon propre serveur, dans ce cas, veuillez utiliser votre propre pour les tests).

J'ai aussi tester la présence d' window.google.load - je pourrais aussi faire un typeof vérifiez que les choses sont des objets ou des fonctions appropriées. Mais je pense que cela fait l'affaire.

Voici juste le chargement de la logique, puisque la mise en valeur du code semble échouer depuis que j'ai posté l'ensemble de la page HTML j'ai été le tester:

if (window.google && window.google.load) {
        google.load("jquery", "1.3.2");
    } else {
        document.write('<script type="text/javascript" src="http://joecrawford.com/jquery-1.3.2.min.js"><\/script>');
    }

Même si je dois dire, je ne suis pas sûr que si c'est une préoccupation pour les visiteurs de votre site, vous devriez être à jouer avec les Google AJAX Bibliothèques d'API .

Fait amusant: j'ai essayé d'abord d'utiliser un bloc try..catch dans différentes versions, mais ne pouvait pas trouver une combinaison qui était aussi propre que cela. Je serais intéressé de voir d'autres implémentations de cette idée, purement comme un exercice.

31voto

Emanuel Kluge Points 319

si vous avez modernizr.js intégré sur votre site, vous pouvez utiliser le haut-yepnope.js pour charger vos scripts en mode asynchrone - entre autres jquery (avec reprise).

Modernizr.load([{
    load : '//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js'
},{
    test : window.jQuery,
    nope : 'path/to/local/jquery-1.7.2.min.js',
    both : ['myscript.js', 'another-script.js'],
    complete : function () {
        MyApp.init();
    }
}]);

cette charge jquery à partir de google-cdn. par la suite, il est vérifié, si jquery a été chargé avec succès. si non ("non"), la version locale est chargé. aussi vos scripts personnels sont chargés - les "deux" indique que la charge processus est iniated indépendamment du résultat du test.

quand tout à charge les processus sont complets, une fonction est exécutée, dans le cas 'MyApp.init'.

personnellement, je préfère cette façon asynchrone script de chargement. et que je m'appuie sur la fonctionnalité des tests fournis par modernizr lors de la construction d'un site, je l'ai embarqué sur le site de toute façon. donc il n'y a effectivement pas de frais généraux.

22voto

Acorn Points 606

Il ya quelques grands des solutions ici, mais je vais comme à franchir une étape supplémentaire concernant le fichier local.

Dans un scénario où Google ne parviennent pas, il doit charger une source locale, mais peut-être un fichier physique sur le serveur n'est pas nécessairement la meilleure option. Je soulève cette question parce que je suis actuellement à la mise en œuvre de la même solution, que j'ai envie de retomber dans un fichier local, qui est généré par une source de données.

Mes raisons pour cela est que je veux avoir un morceau de l'esprit quand il s'agit de garder une trace de ce que je charge à partir de Google contre ce que j'ai sur le serveur local. Si je veux changer de version, je veux garder ma copie locale synchronisés avec ce que je suis en train de charger à partir de Google. Dans un environnement où il y a beaucoup de développeurs, je pense que la meilleure approche serait d'automatiser ce processus, afin que tous l'on aurait à faire est de changer un numéro de version dans un fichier de configuration.

Voici ma proposition de solution qui devrait fonctionner en théorie:

  • Dans un fichier de configuration d'application, je vais ranger 3 choses: l'url absolue de la bibliothèque, l'url de l'api js, et le numéro de version
  • Écrire une classe qui obtient le contenu du fichier de la bibliothèque elle-même (obtient l'url de l'application de config), il les stocke dans mon source de données avec le nom et le numéro de version
  • Écrivez un gestionnaire qui tire de mon fichier local de la db et met en cache le fichier jusqu'à ce que le numéro de version change.
  • En cas de modification (dans mon application de config), ma classe va tirer le contenu du fichier en fonction du numéro de version, l'enregistrer dans un nouveau dossier dans mon source de données, puis le gestionnaire de coup de pied dans et de servir de la nouvelle version.

En théorie, si mon code est écrit correctement, j'aurais besoin de faire est de changer le numéro de version de mon application config puis voilà! Vous avez une solution de secours qui est automatisé, et vous n'avez pas à maintenir la sécurité physique des fichiers sur votre serveur.

Ce n'est que tout le monde pense? Peut-être que c'est exagéré, mais il peut être une élégante méthode de l'entretien de votre ajax bibliothèques.

Acorn

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X