3

J'écris une extension de navigateur raisonnablement complexe pour Chrome, Firefox & Safari.Conditionnellement charger le script de contenu dans une extension Safari comme dans FF/Chrome?

Dans Chrome & Firefox, je peux spécifier quel script de contenu est injecté dans quels sites basés sur la correspondance d'URL.

Safari ne semble pas offrir une telle fonctionnalité (à granularité fine) - ils n'autorisent qu'une seule liste blanche/noire pour tous les sites.

Existe-t-il un moyen de le faire? Si non, comment puis-je charger un fichier Javascript sous condition? (en gardant à l'esprit que je ne peux pas les ajouter au DOM).

J'ai essayé yepnope, mais il est ajouté au DOM.

Remarque: Je ne souhaite pas ajouter de logique aux fichiers réels, car ils sont essentiellement du code de bibliothèque dupliqué sur les extensions.

Répondre

9

safari.extension.addContentScript et safari.extension.addContentScriptFromURL vous permettent d'injecter par programme des scripts. Vous pouvez utiliser ces méthodes dans votre page globale, une extension popover ou une barre d'extension. Pour les deux méthodes, les arguments sont les suivants:

  • le script d'injecter (comme une chaîne ou une URL, respectivement),
  • une liste blanche des modèles d'URL pour correspondre à des pages sur lesquelles pour injecter le script,
  • une liste noire pour exclure les pages, et
  • un booléen pour injecter le script en tant que script de fin (ou bien en tant que script de démarrage).

Voir this page dans la référence Safari Extensions pour plus de détails. Notez que la liste blanche et la liste noire utilisent toutes deux un format de modèle d'URL similaire (mais pas identique) aux caractères génériques UNIX et qui n'est pas aussi puissant que les expressions régulières. Ce format de modèle est décrit au bas de this page.

+0

Merci. Je ne peux pas croire que je ne pouvais pas trouver ça. –

3

La réponse acceptée est correcte, mais il est important de noter que vous ne pouvez pas injecter par programme des scripts dans des onglets ouverts tels que Chrome et Firefox. Les états SafariExtension Class Reference indiquent:

Ajout et suppression de feuilles de style et de scripts. L'ajout ou la suppression d'une feuille de style de contenu s'applique immédiatement aux pages. L'ajout ou la suppression d'un script de contenu s'applique uniquement aux pages ouvertes ou rechargées après ce point. La suppression d'une feuille de style ou d'un script figurant dans le fichier Info.plist ne le supprime que de la session de navigation en cours.

En raison de cette limitation, il est souvent plus facile de simplement compter sur l'Scripts attribut dans Info.plist à la place.

+0

Mais «Info.plist» n'est-il pas la «liste blanche/noire» sur laquelle OP se plaignait? – Teepeemm

+0

En effet, @Teepeemm. Mon but était de préciser que 'addContentScript' et' addContentScriptFromURL' ont la grave limitation de ne pas pouvoir affecter les onglets ouverts. Je (et apparemment d'autres) avais trébuché sur cette question en pensant que cela permettait un vrai chargement dynamique. –

Questions connexes