58 votes

Création d'un widget javascript pour d'autres sites

Je cherche à créer un "widget" javascript qui peut être hébergé sur d'autres sites. Par exemple. Je veux héberger le code javascript sur mon site :

http://scripts.mysite.com/mywidget.js

(Pensez-y comme à Google Analytics).

En gros, je veux distribuer des données via ce javascript. Mais ce dont je ne suis pas sûr, c'est :

  • Les règles sont-elles différentes pour le développement lorsque l'on crée un javascript pour un autre site (cross site) ?
  • Existe-t-il des sites web qui expliquent ces différences ?

77voto

PatrikAkerstrand Points 23968

J'essaierais :

  1. Rendez-le configurable

    • Charger des feuilles de style externes ?
    • Où trouver les ressources dont j'ai besoin ? (images, feuilles de style)
    • Quelle disposition/taille dois-je avoir ?

    Vous laissez ainsi l'utilisateur décider s'il veut que votre widget charge automatiquement la feuille de style ou s'il veut l'héberger lui-même. S'il le fait, il peut également mettre à jour les styles pour mieux s'adapter à la page sur laquelle se trouve le widget.

  2. Fournir un assistant pour générer un extrait de code à inclure dans la page

    • Assure que même les utilisateurs moyennement techniques peuvent utiliser votre widget.
  3. Faites-le léger

    • Servez tout ce qui est minifié et compressé
    • Servez avec des en-têtes de cache, des e-tags, last-modified et tous les autres en-têtes utiles auxquels vous pouvez penser. Cela permettra de réduire la charge sur vos serveurs et de rendre votre widget plus réactif.
    • Essayez d'éviter les dépendances avec les bibliothèques, ou vérifiez si elles sont chargées sur la page où le widget est utilisé avant de les charger.
  4. Méfiez-vous des conflits

    • Prototype utilise $, tout comme jQuery. Si votre widget dépend de Prototype, et que la page sur laquelle il est hébergé utilise jQuery sans noConflict-mode des problèmes surviendront
    • Ne démolissez pas l'espace de nom global !
      • Si vous ne voulez pas que quelqu'un interagisse avec votre widget, placez-le dans une fonction auto-exécutrice dans une fermeture et ne créez aucune variable globale.
      • Si vous souhaitez que les utilisateurs puissent interagir avec votre widget, par exemple pour ajouter des écouteurs d'événements, revendiquez une seule variable globale, disons ExampleComWidget, comme un objet littéral et placez-y vos méthodes. Les utilisateurs pourraient alors interagir comme suit : ExampleComWidget.addListener('update', callback);
  5. Utilisez un balisage intelligent

    • Veillez à utiliser le scoping sur vos classes et vos identifiants, afin d'éviter autant que possible les conflits.

      Par exemple, si le nom de votre entreprise est exemple.com, vous pouvez utiliser des classes comme : com-ex-widget-newsItem

    • Validez votre balisage ! Vous ne voulez pas casser le site d'un utilisateur.

    • Le balisage sémantique, c'est bien, mais vous devriez peut-être éviter <h1> -car ils sont particulièrement bien placés dans les moteurs de recherche. Vous pouvez probablement vous en sortir en utilisant <h4> et moins. Cette balle est peut-être un peu fausse. Dans le doute, il est préférable d'utiliser le balisage sémantique plutôt que de ne pas le faire.

  6. Récupérez les données de votre site en insérant des éléments script.

    • Il s'agit d'un moyen infaillible de contourner les restrictions liées au principe de l'identité d'origine.
    • Attachez un onload-listener à l'élément script pour savoir quand les données sont prêtes, ou utilisez jsonp

0 votes

Bonjour PatrikAkerstrand Merci pour cet article, j'espère qu'il vous aidera vraiment.

3 votes

Pouvez-vous nous donner un exemple à ce sujet ?

28voto

Matt Smith Points 1280

Je pense que c'est un excellent article sur la façon d'implémenter un script intégré. http://alexmarandon.com/articles/web_widget_jquery/

8voto

Alexandre Jasmin Points 18067

Votre script ne doit pas interférer avec le reste de la page.

  • Gardez le nombre de globales au minimum minimum (un espace de noms objet devrait suffire)
  • N'ajoutez pas de propriétés aux objets sans raison
  • Ne vous attendez pas à être le seul script qui écoutent des événements tels que window.onload
  • Si vous utilisez des boucles for..in, gardez à l'esprit que que d'autres scripts peuvent avoir ajouté des éléments à Array.prototype
  • Tenez compte des feuilles de style. Le style par défaut des éléments HTML peut avoir été modifié.
  • Ne mettez pas à jour votre script sans raison car vous risquez de casser beaucoup de sites.

3voto

latitov Points 302

Ce que PatrikAkerstrand a dit, est totalement, 100% vrai.

Ce que je veux ajouter ici, c'est un framework en vanilla JS qui peut vous faire gagner beaucoup de temps et d'efforts pour le mettre en œuvre, car tout est pensé, peaufiné et testé. Il ne vous reste plus qu'à définir vos propres widgets et à les utiliser.

Voici un exemple de ce à quoi cela ressemble.

Un code de widget

// inside a js file of a widget class
(function () {
    var Module_Path = ["WidgetsLib", "a1", "Button"];
    var curr = this;
    Module_Path.forEach(function(i){if (curr[i] == null) {addChildToTree(curr, i, {})} curr = curr[i]});

    specialize_with(curr, {
        CSS_Literal: `
            .{{WIDGET_CLASS_ID}}_Something {
                color: hsl(0, 0%, 20%);
            }
        `,
        HTML_Literal: `
            <div onclick="{{WIDGET_INSTANCE}}.onclick(event)"
                class="{{WIDGET_CLASS_ID}}_Something"
            >
            SOME SUPER COOL WIDGET
            </div>
        `,
        new: typical_widget_new,
    });
})();

Un HTML :

<div id="w1" style="background-color: hsl(200, 50%, 50%);"></div>

<script src="WidgetsLib/a1/Button/js"></script>

Un code JavaScript utilisateur :

var b1 = WidgetsLib.a1.Button.new("w1", {
    onclick: function(ev) {
        ev.target.style.color = "#ffff00";
        console.log("====== HERE");
    }
});

Veuillez télécharger et ouvrir le fichier Widget_v2.md.html dans un navigateur. https://github.com/latitov/JS_HTML_Widgets .

Ce que vous obtiendrez :

  • article très intéressant à ce sujet ;
  • des extraits de code et des exemples ;
  • prêt à l'emploi... framework en vanilla JS, pour créer vos propres widgets ;

Et appréciez la création de vos propres widgets réutilisables, d'une complexité arbitraire, en toute simplicité !

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