Enregistrer un élément personnalisé à partir d'une extension Chrome

moment dipolaire

J'ai essayé d'enregistrer des éléments personnalisés via javascript natif et polymère à partir d'une extension chrome sans succès. Le problème est documenté ici .

Uncaught NotSupportedError: Failed to execute 'registerElement' on 'Document': Registration failed for type 'polymer-element'. Elements cannot be registered from extensions.

Je recherche des suggestions pour l'utilisation de composants Web dans une extension - quelqu'un l'a-t-il fait? Mon instinct est d'enregistrer ces éléments en utilisant des balises html standard (div, etc ...) sur le shadow DOM pour le moment jusqu'à ce qu'il soit pris en charge. Aucune suggestion?

moment dipolaire

C'est en effet possible. Mais, un peu hacky.

Réponse originale

Voici les étapes:

  • Composants Web natifs (pas de polymère)
    REMARQUE : cela nécessite l'utilisation du polyfill de webcomponentsjs.
    Chrome empêchera l' registerElementexécution native dans une extension chrome. Pour le surmonter, vous devez empêcher l'utilisation du natif registerElementau profit d'un simulé (le polyfill).

Dans webcomponents-lite.jsCommenter le code suivant (et rendez-le plus élégant si vous le souhaitez:

scope.hasNative = false; //Boolean(document.registerElement);

Et voila! le natif registerElementa maintenant été remplacé par le polyfill - que chrome n'empêche pas d'utiliser au sein d'une extension.

  • Composants Web Polymer
    Vous devrez exécuter le code répertorié dans l'étape ci-dessus et en plus, vous devrez charger le polymère via le code suivant

      var link = document.createElement('link');
      link.setAttribute('rel', 'import');
      link.setAttribute('href', "link_to_your_polymer.html");
      link.onload = function() {
         // Execute polymer dependent code here
      }
    

UPDATE # 1 - Solution améliorée

Après une enquête plus approfondie, j'ai appris que Polymer ne fonctionnerait pas dans une extension lorsqu'il était chargé dynamiquement. En conséquence, les modifications ci-dessus sont nécessaires. Une alternative plus simple à cela consiste à charger le polymère dans la tête de votre script de contenu comme ceci:

  function loadRes(res) {
    return new Promise(
      function(resolve, reject) {
        var link = document.createElement('link');
        link.setAttribute('rel', 'import');
        link.setAttribute('href', res);
        link.onload = function() {
          resolve(res);
        };
        document.head.appendChild(link);
      });
  }

  loadRes( chrome.extension.getURL("path_to_your_webcomponents-lite.js") ) // You may/may not need webcomponents.js here
    .then( loadRes( chrome.extension.getURL("path_to_your_polymer.html") ) )
    .then( loadRes( chrome.extension.getURL("path_to_your_custome_component") ) )
    .then(function(){
      // code that depends on web components 
    });

VOUS DEVEZ ajouter les URL chargées par chrome.extension.getURLà la web_accessible_resourcespartie de votre manifeste.

Ce qui précède est nécessaire car polymer.html doit être chargé via une ressource html. Lire la réponse d'Eric Bidelman ici

Veuillez noter que vous n'aurez peut-être pas besoin du polyfill des composants Web chargé ici si votre composant les charge déjà.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment enregistrer une capture d'écran avec l'extension Chrome dans un fichier?

Comment utiliser correctement parseInt pour sélectionner/vérifier un élément span à partir d'une extension chrome

Obtenir l'élément max dans un vecteur d'objets à partir d'une classe personnalisée

Appeler une fonction dans l'extension Chrome à partir d'un site Web

Enregistrer une valeur vide à partir d'un champ de texte personnalisé dans WooCommerce

Cliquer sur un élément d'une page via l'extension Chrome

Enregistrer un DocumentFile sous Android avec une extension personnalisée

Remplacement de l'intégralité du document HTML d'un site Web à partir d'une extension Chrome

IndexOutOfBound lors de la récupération d'un élément filtré à partir d'une vue de liste personnalisée

comment enregistrer une capture d'écran uiview recadrée à l'aide d'un marché d'extension

À partir de Chrome 54, comment envoyer un événement textInput de confiance à partir d'une extension?

Extension Chrome - Afficher une notification / une fenêtre contextuelle personnalisée (élément HTML) au-dessus d'une vidéo en plein écran

La création d'un en-tête personnalisé dans une extension Chrome échoue

Comment renvoyer un élément de tableau personnalisé à partir d'une classe et manipuler ses propriétés? C ++

Obtenir un élément d'une vue personnalisée

Comment obtenir une source HTML chargée à partir d'un site Web dans une extension Chrome

Rediriger vers une URL d'extension chrome à partir d'un script de contenu?

Enregistrer l'élément de la liste dans la liste à partir d'une autre activité

Dans l'API Tensorflow C ++, comment enregistrer une image ou un tableau à partir d'un tenseur

Imprimer / enregistrer des objets à partir d'un tableau à l'aide d'une méthode de boucle for

Comment appeler un élément qui a été déclaré dans la page OPTION.html dans une extension Chrome?

Comment enregistrer un élément de courrier dans Outlook à partir d'un fichier

Enregistrer l'état d'instance d'un ListView personnalisé?

Afficher un article personnalisé à partir d'une taxonomie personnalisée

Est-il possible d'obtenir JSON à partir d'une URL et de l'enregistrer en tant que fichier json avec un nom personnalisé dans un chemin/dossier spécifié via le frontal ?

Comment obtenir l'élément sélectionné à partir d'un AutoCompleteTextView avec un adaptateur personnalisé

comment télécharger ou enregistrer une image à partir d'un ppt powerpoint avec python pptx

C++ Comment enregistrer des éléments dans un vecteur à partir d'une fonction

Comment une extension Chrome peut-elle enregistrer de nombreux fichiers dans un répertoire spécifié par l'utilisateur?

TOP liste

  1. 1

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

  2. 2

    Uncaught TypeError: map n'est pas une fonction dans Reactjs avec Firebase

  3. 3

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  7. 7

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  8. 8

    Concaténer des variables dans ansible

  9. 9

    Filtrer les données en fonction des conditions d'une trame de données

  10. 10

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  11. 11

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  12. 12

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  13. 13

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  14. 14

    Stop jQuery execution after one time execution

  15. 15

    obtenir le nombre de marqueur affiché sur la carte

  16. 16

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  17. 17

    Générer une variable binaire avec une corrélation prédéfinie avec une variable déjà existante

  18. 18

    comment afficher un bouton au-dessus d'un autre élément ?

  19. 19

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Comment utiliser le stockage local et le supprimer lorsqu'il n'est pas nécessaire

chaudétiquette

Archive