7
votes

Comment désactiver les touches de raccourci Facebook avec une extension chromée?

J'ai créé une extension chromée qui utilise les hottaders [alt] + [0 ... 9] Seulement pour découvrir Facebook utilise les mêmes raccommodées. Y a-t-il un moyen possible que mon extension puisse désactiver les touches de pataugeage de Facebook afin que le mineur soi -ille seul? Je suis assez certain que j'ai identifié le code Facebook utilise pour implémenter leur [0. 0 ... 9] Hottadysys: xxx

Ceci est dans un script appelé de la tête de la tête du Document root. J'ai essayé ce qui suit pour les désactiver: xxx

et même xxx

je devine plus loin que la raison aucune de Ces tentatives de travail sont parce que bien que les scripts de contenu de l'extension chromé partagent un DOM avec n'importe quelle page Web sur laquelle ils courent, peut-être qu'ils ne partagent pas les environnements de codage? Toute perspicacité serait appréciée!


0 commentaires

3 Réponses :


6
votes

Votre intuition est correcte, le JavaScript qui s'exécute à partir d'un script de contenu dans le cadre d'une extension chromée est exécuté dans une boîte à sable qui n'a pas accès au JavaScript exécuté dans la page contenant.

par chrome doc sur les scripts de contenu : xxx

Tout d'abord, je vous recommanderais de considérer différentes clés de raccourci. Remplacer la fonctionnalité des touches de raccourci existants pour votre propre extension pourrait fournir une expérience utilisateur de Jarring pour une personne qui attend la clé de raccourci Facebook. Imaginez si une extension remplaça les raccourcis CTRL-C et CTRL-P faisant partie du système d'exploitation de bureau pour copier et coller - je pense que vous auriez des utilisateurs contrariés qui supprimeraient probablement la chose qui a changé le comportement qu'ils ont appris précédent. < / p>

Toutefois, si vous êtes insistant, ici, voici une solution de contournement de chargement de JavaScript qui s'exécutera dans le contexte de la page contenant:

EDIT: Mise à jour par Commentaire sur Référencer le fichier JS dans un plugin au lieu d'une hébergée sur le Web

Premièrement, vous devrez créer un fichier JavaScript dans votre plug-in Chrome: Remplacement-fb-hotturesys.js .

Tout d'abord, vous devrez héberger un fichier JavaScript quelque part sur le Web contenant le script que vous souhaitez exécuter sur la page, disons que vous l'hébergeez à: http://example.com/override-fb-hotkeys.jsled/code >.

then, à partir de votre script de contenu, vous pouvez insérer une étiquette de script dans le DOM qui fait référence à votre Fichier JavaScript, quelque chose comme ceci: xx X

Le JavaScript sera ensuite récupéré et exécuté dans le contexte de la page contenant, et non le code Sandboxed du plugin chrome.


3 commentaires

Merci pour cela. C'est vraiment perspicace! J'ai trouvé qu'il n'y a pas besoin d'héberger sur un autre site car cela fonctionne: script.settattribute ("src", chromé.extension.geturl ("Remplacer-fb-hotturesys.js")); toutefois Le code document.documentalement.onkeydown = fonction (E) {}; dans le fichier injecté ne désactive plus les raccourcis FB afin d'être une aide supplémentaire pour être la bienvenue!


Vous auriez besoin d'inverser l'ingénieur le code sur la page Facebook pour déterminer comment les événements clés sont capturés et manipulés, puis remplacent cette fonctionnalité. Je regardais un peu mais rien n'a sauté. J'ai remarqué que lorsque j'ai supprimé l'élément avec ID "Bluebarholder" (toute la barre supérieure), les touches de raccourci n'ont pas fonctionné.


Hey, je veux te demander depuis que tu semblais savoir des choses. Savez-vous s'il y a une solution de contournement intelligente pour simplement désactiver les raccourcis sur Facebook sur Chrome? Je ne peux pas supporter le fait que L est comme (j'utilise Ctrl + l très souvent pour aller à la barre de navigation). Comme, même un simple script de ligne aiderait



13
votes

Les scripts de contenu de Chrome sont exécutés dans un environnement de sandbox [Source ] sup>. Il n'y a pas de moyen direct de communiquer avec l'objet global ( fenêtre code>).

Un autre piège commun est que le développeur oublie comment / lorsque le script est injecté. P>

  • Par défaut, le script est injecté sur un point appelé " document_idle em>". À ce stade, le document n'est pas occupé ( DomContentOached code> a tiré, window.onload code> peut ou non être tiré). LI>
  • En conséquence, les fonctions du script peuvent être écrasées immédiatement après la déclaration. Li> ul>

    injecter un petit script, je vous recommande d'ajouter le code directement au script de contenu: p> xxx pré>

    Si vous souhaitez vous assurer que la méthode est ne pas être écrasé, vous pouvez utiliser objet.defineProperty Code> , pour définir une propriété immuable: p> xxx pré>

    La méthode mentionnée précédemment est prise en charge dans Firefox 4+ et au moins chrome 5+. Si vous souhaitez également prendre en charge Firefox 2+ et Chrome 1+, vous pouvez jouer avec le __ définir __ code>, pour empêcher ONKYDOOD code> d'être défini: p>

    document.documentElement.__defineSetter__('onkeydown', function(){});
    


4 commentaires

Et que si le code Facebook remplace l'objet.defineProperty?


@Pacerier Si vous exécutez le code avec run_at; "Document _start" , alors il ne devrait pas être possible.


Est-il possible pour 2 extensions DIFF pour faire document_start ?


@Pacerier Oui, mais si l'extension qui fonctionne d'abord définit une propriété configurable: FAUX, les extensions qui fonctionnent après cela ne peuvent pas redéfinir la propriété.



1
votes

Voici comment vous pouvez le faire en utilisant jQuery

Supprimer tous les raccourcis pour n'importe quelle page Web: P>

$('[accessKey]').attr('accessKey','')


0 commentaires