12
votes

Méthode recommandée pour localiser le script actuel?

J'écris un script qui doit ajouter des éléments DOM à la page, à l'endroit où le script est situé (approche de type widget). Quelle est la meilleure façon de faire cela?

Voici les techniques que je considère:

  1. Inclure un élément avec un identifiant = "localisateur" juste au-dessus du script. Problèmes:
    • Je n'aime pas le balisage supplémentaire
    • Si je réutilise le widget de la page, plusieurs éléments auront le même identifiant "localisateur". Je pensais à ajouter une ligne dans le script pour supprimer l'ID une fois utilisé, mais toujours ...
    • Ajoutez un identifiant au script. Problèmes:
      • Même s'il semble fonctionner, l'attribut ID n'est pas valide pour l'élément de script
      • même problème que ci-dessus, plusieurs éléments auront le même identifiant si je réutilise le script de la page.
      • Utilisez getelementsByTagname ("script") et choisissez le dernier élément. Cela a travaillé pour moi jusqu'à présent, il semble juste un peu lourd et je ne suis pas sûr que si elle est fiable (en pensant à des scripts différés)
      • document.write: pas élégant, mais semble faire le travail.

      • [modifier] Basé sur la réponse de IdealMachine, je pense à une autre option:

        • Inclure dans la balise de script Un attribut, par exemple, but = "Tabify".
        • Utilisez getelementsByTagname ("script") pour obtenir tous les scripts.
        • boucle via les scripts et vérifiez l'attribut Goal = "Tabify" pour trouver mon script.
        • Supprimer l'attribut de but au cas où il y a un autre widget de la page.
        • [modifier] Une autre idée, également inspirée des réponses jusqu'à présent:

          • Utilisez getelementsByTagname ("script") pour obtenir tous les scripts.
          • boucle à travers les scripts et vérifiez innerhtml pour trouver mon script.
          • à la fin du script, supprimez la balise de script au cas où il y a un autre widget de la page.

0 commentaires

9 Réponses :


4
votes

J'ai travaillé pour seulWire qui fournit, comme service principal, un widget à mettre sur votre site.

Nous utilisons le var scripts = document.getelementsbyTagname ("script"); var ifscript = scripts [scripts.length - 1]; astuce et il semble fonctionner assez bien. Ensuite, nous utilisons ipscript.parentnode.insertfore (GA, CeciScript); Pour insérer ce que nous voulons avant cela, dans l'arbre DOM.

Je ne suis pas sûr de comprendre pourquoi vous considérez cela une solution "lourde" ... Cela n'implique pas l'itération, c'est une solution pure entre navigation croisée qui s'intègre parfaitement.


2 commentaires

Eh bien, "lourd" par rapport à un get de getByDyID direct. Mais je reçois votre point, pas une grosse affaire.


Works Cross-navigateur Si aucun async est utilisé dans le