Quelqu'un ici a-t-il de l'expérience avec / dans le développement d'extensions IE qui peuvent partager leurs connaissances? Cela comprendrait des exemples de code, ou des liens vers de bons, ou de la documentation sur le processus, ou quoi que ce soit.
Je veux vraiment le faire, mais je frappe un mur géant avec une documentation moche, un code moche / un exemple de code / son absence. Toute aide / ressources que vous pourriez offrir serait grandement appréciée.
Plus précisément, je voudrais commencer par savoir comment accéder au / manipuler le DOM à partir d'une extension IE.
EDIT, encore plus de détails:
Idéalement, je voudrais planter un bouton de barre d'outils qui, lorsque vous cliquez dessus, fait apparaître un menu contenant des liens vers des sites externes. Je voudrais également accéder au DOM et planter du JavaScript sur la page en fonction de certaines conditions.
Quelle est la meilleure façon de conserver les informations dans une extension IE? Dans Firefox / Chrome / La plupart des navigateurs modernes, vous utilisez window.localStorage
, mais évidemment avec IE8 / IE7, ce n'est pas une option. Peut-être une base de données SQLite ou autre? Est-il correct de supposer que .NET 4.0 sera installé sur l'ordinateur d'un utilisateur?
Je ne veux pas utiliser Spice IE car je veux en créer un qui est également compatible avec IE9. J'ai également ajouté la balise C ++ à cette question, car s'il est préférable d'en créer une en C ++, je peux le faire.
Réponses:
[MISE À JOUR] Je mets à jour cette réponse pour fonctionner avec Internet Explorer 11 , dans Windows 10 x64 avec la communauté Visual Studio 2017 . La version précédente de cette réponse (pour Internet Explorer 8, dans Windows 7 x64 et Visual Studio 2010) se trouve au bas de cette réponse.
Création d'un module complémentaire Internet Explorer 11 fonctionnel
J'utilise Visual Studio 2017 Community , C # , .Net Framework 4.6.1 , donc certaines de ces étapes peuvent être légèrement différentes pour vous.
Vous devez ouvrir Visual Studio en tant qu'administrateur pour créer la solution, afin que le script post-génération puisse enregistrer le BHO (nécessite un accès au registre).
Commencez par créer une bibliothèque de classes. J'ai appelé le mien InternetExplorerExtension .
Ajoutez ces références au projet:
"Microsoft Internet Controls"
"Microsoft.mshtml"
Remarque: MSHTML n'était pas enregistré dans mon système, même si je pouvais le trouver dans la fenêtre Ajouter une référence. Cela a provoqué une erreur lors de la construction:
Le correctif peut être trouvé à http://techninotes.blogspot.com/2016/08/fixing-cannot-find-wrapper-assembly-for.html Ou, vous pouvez exécuter ce script de commandes:
Créez les fichiers suivants:
IEAddon.cs
Interop.cs
et enfin un formulaire, que nous utiliserons pour configurer les options. Dans ce formulaire, placez un
TextBox
et un OkButton
. Réglez DialogResult du bouton sur Ok . Placez ce code dans le code du formulaire:Dans les propriétés du projet, procédez comme suit:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Dans l'onglet Générer des événements, définissez la ligne de commande des événements post-génération sur:
Attention: même si mon ordinateur est x64, j'ai utilisé le chemin du non-x64
gacutil.exe
et cela a fonctionné ... celui spécifique pour x64 est à:IE 64 bits a besoin de BHO compilé en 64 bits et enregistré en 64 bits. Bien que je ne pouvais que déboguer en utilisant 32 bits IE11, l'extension enregistrée 32 bits fonctionnait également en exécutant 64 bits IE11.
Cette réponse semble avoir quelques informations supplémentaires à ce sujet: https://stackoverflow.com/a/23004613/195417
Si vous en avez besoin, vous pouvez utiliser le regasm 64 bits:
Comment fonctionne ce module complémentaire
Je n'ai pas changé le comportement du module complémentaire ... jetez un œil à la section IE8 ci-dessous pour la description.
## Réponse précédente pour IE8
Mec ... ça a été beaucoup de travail! J'étais tellement curieux de savoir comment faire cela, que je l'ai fait moi-même.
Tout d'abord ... le crédit n'est pas tout à moi. Voici une compilation de ce que j'ai trouvé sur ces sites:
Et bien sûr, je voulais que ma réponse ait les fonctionnalités que vous avez demandées:
Je vais le décrire étape par étape, comment j'ai réussi à le faire en travaillant avec Internet Explorer 8 , sous Windows 7 x64 ... notez que je n'ai pas pu tester dans d'autres configurations. J'espère que vous comprenez =)
Création d'un module complémentaire Internet Explorer 8 fonctionnel
J'utilise Visual Studio 2010 , C # 4 , .Net Framework 4 , donc certaines de ces étapes peuvent être légèrement différentes pour vous.
Création d'une bibliothèque de classes. J'ai appelé le mien InternetExplorerExtension .
Ajoutez ces références au projet:
Remarque: Ces références peuvent se trouver à différents endroits sur chaque ordinateur.
voici ce que contient ma section références dans csproj:
Créez les fichiers de la même manière que les fichiers IE11 mis à jour.
IEAddon.cs
Vous pouvez décommenter les lignes suivantes de la version IE11:
Interop.cs
Identique à la version IE11.
et enfin un formulaire, que nous utiliserons pour configurer les options. Dans ce formulaire, placez un
TextBox
et un OkButton
. Réglez DialogResult du bouton sur Ok . Le code est le même pour l'addon IE11.Dans les propriétés du projet, procédez comme suit:
C:\Program Files (x86)\Internet Explorer\iexplore.exe
http://msdn.microsoft.com/en-us/library/ms976373.aspx#bho_getintouch
Dans l'onglet Générer des événements, définissez la ligne de commande des événements post-génération sur:
Attention: comme mon ordinateur est x64, il y a un x64 spécifique à l'intérieur du chemin de l'exécutable gacutil sur ma machine qui peut être différent sur le vôtre.
IE 64 bits a besoin de BHO compilé en 64 bits et enregistré en 64 bits. Utilisez RegAsm.exe 64 bits (réside généralement dans C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ RegAsm.exe)
Comment fonctionne ce module complémentaire
Il parcourt tout l'arborescence DOM, remplaçant le texte, configuré à l'aide du bouton, par lui-même avec un fond jaune. Si vous cliquez sur les textes jaunis, cela appelle une fonction javascript qui a été insérée dynamiquement sur la page. Le mot par défaut est «navigateur», de sorte qu'il correspond à beaucoup d'entre eux! EDIT: après avoir changé la chaîne à mettre en surbrillance, vous devez cliquer sur la case URL et appuyer sur Entrée ... F5 ne fonctionnera pas, je pense que c'est parce que F5 est considéré comme 'navigation', et il faudrait l'écouter pour naviguer l'événement (peut être). J'essaierai de résoudre ce problème plus tard.
Maintenant, il est temps de partir. Je suis très fatigué. N'hésitez pas à poser des questions ... peut-être que je ne pourrai pas répondre puisque je pars en voyage ... dans 3 jours je serai de retour, mais j'essaierai de venir ici en attendant.
la source
$(TargetDir)$(TargetFileName)
utiliser"$(TargetDir)$(TargetFileName)"
2. Si vous utilisez Visual Studio 2010 Express, vous ne voyez probablement pas (je fais) l' option Démarrer le programme externe dans l'onglet Déboguer - je exécutez simplement IE et accédez à l'URL fournie 3. Cela ne semble pas fonctionner sur IE9 - je peux ouvrir le formulaire (options de surligneur) mais je ne sais pas comment le mettre en surbrillance le texteUne autre approche intéressante serait de vérifier:
http://www.crossrider.org
C'est un framework basé sur JS avec jquery qui vous permet de développer des extensions de navigateur pour IE, FF et Chrome en utilisant un seul code JS commun. Fondamentalement, le cadre fait tout le travail désagréable et il vous reste à écrire le code de vos applications.
la source
L'état des extensions IE est en fait assez triste. Vous avez l'ancien modèle de IE5 Browser Helper Object (ouais, ces fameux BHO que tout le monde aimait bloquer dans la journée), les barres d'outils et les nouveaux accélérateurs pour IE. Même alors, la compatibilité se brisera parfois. J'ai utilisé pour maintenir une extension pour IE6 qui a rompu avec IE7, donc il y a des choses qui ont changé. Pour la plupart, pour autant que je sache (je n'ai pas touché aux BHO depuis des années), vous devez toujours les coder en utilisant les bibliothèques de modèles actifs (un peu comme une STL pour COM de Microsoft) et ainsi, c'est uniquement pour C ++. Vous pouvez faire COM Interop avec C # et vous en sortir en C # mais cela va probablement être trop difficile pour ce que cela vaut. En tous cas,
http://msdn.microsoft.com/en-us/library/aa753587(v=vs.85).aspx
Et pour les accélérateurs qui sont nouveaux dans IE8, vous pouvez vérifier celui-ci.
http://msdn.microsoft.com/en-us/library/cc289775(v=vs.85).aspx
Je suis d'accord que la documentation est terrible et les API sont assez obsolètes. J'espère toujours que cela aide.
EDIT: Je suppose que je peux jeter une dernière source d'information ici. Je regardais mes notes de dos quand je travaillais sur les BHO. Et c'est l'article qui m'a permis de commencer avec eux. Il est un peu ancien, mais a une bonne explication des interfaces ATL que vous utiliserez lorsque vous travaillerez avec des BHO IE (IObjectWithSite par exemple). Je pense que c'est assez bien expliqué et cela m'a beaucoup aidé à l'époque. http://msdn.microsoft.com/en-us/library/bb250436.aspx J'ai également vérifié l'exemple publié par GregC. Il fonctionne avec au moins IE8 et il est compatible avec VS 2010, donc si vous voulez faire du C #, vous pouvez vous y lancer et jeter un œil au livre de Jon Skeet. (C # in Depth 2nd edition) Le chapitre 13 contient de nombreuses informations sur les nouvelles fonctionnalités de C # 4 que vous pouvez utiliser pour rendre l'interaction avec COM plus agréable. (Je vous recommanderais quand même de faire votre addin en C ++)
la source
Le développement de C # BHOs est une douleur dans le cul. Cela implique beaucoup de code COM icky et d'appels p / invoke.
J'ai un C # BHO presque fini ici , que vous êtes libre d'utiliser la source pour tout ce que vous voulez. Je dis «surtout» , car je n'ai jamais compris comment enregistrer les données d'application sous le mode protégé IE .
la source
Je travaille avec le contrôle du navigateur Web d'IE depuis des années maintenant, et au cours d'eux, un nom revient sans cesse avec des publications utiles: Igor Tandetnik
Si je développais une extension, je ciblerais un BHO et commencerais à googler pour:
BHO Igor Tandetnik
OU
Objet d'aide du navigateur Igor Tandetnik
Ses messages sont souvent très détaillés et il sait de quoi il parle.
Vous allez vous retrouver à vos oreilles dans la programmation COM et ATL. Pour un exemple de procédure pas à pas, consultez: http://msdn.microsoft.com/en-us/library/ms976373.aspx
la source
Je suis d'accord avec Robert Harvey, les fonctionnalités C # 4.0 ont amélioré l'interopérabilité COM. Voici un peu de code C # plus ancien, qui a désespérément besoin d'une réécriture.
http://www.codeproject.com/KB/cs/Attach_BHO_with_C_.aspx
C'est une tentative de simplifier les choses en évitant ATL et en optant pour Spartan COM:
C ++ et COM pour lancer les BHO
la source
Si vous n'essayez pas de réinventer la roue, vous pouvez essayer Add In Express pour IE . J'ai utilisé le produit pour les trucs VSTO , et c'est assez bon. Ils ont également un forum utile et un support rapide.
la source
C'est évidemment résolu, mais pour les autres utilisateurs, je recommanderais le framework SpicIE . J'ai créé ma propre extension sur cette base. Il ne prend officiellement en charge Internet Explorer 7/8, mais je l'ai testé sur Internet Explorer 6-10 (de Windows XP à Windows 8 Consumer Preview) et cela fonctionne très bien . Malheureusement, il y avait quelques bugs dans la dernière version, j'ai donc dû les corriger et j'ai fait ma propre version: http://archive.msdn.microsoft.com/SpicIE/Thread/View.aspx?ThreadId=5251
la source
Je vous propose chaleureusement ce post de Pavel Zolnikov publié en 2002!
http://www.codeproject.com/Articles/2219/Extending-Explorer-with-Band-Objects-using-NET-and
Il est basé sur l'utilisation d'objets Band et est compilé à l'aide de .Net 2.0. Le code source est fourni et s'ouvre et se compile bien avec Visual Studio 2013. Comme vous le lirez dans les commentaires, il fonctionne parfaitement bien pour IE 11 et sur Windows 7 et Windows 10. Il fonctionnait parfaitement bien pour moi sur Windows 7 + SP1 et IE 11 Profitez-en!
la source
La question est de 2013, maintenant c'est 2020, mais cela peut être utile pour les futurs visiteurs.
J'ai essayé de mettre en œuvre la réponse de @Miguel Angelo, cela n'a pas fonctionné au début.
Il reste encore quelques paramètres à définir.
sur Internet Explorer (j'utilise IE-11) allez sur
Tools-->Internet Options-->Advanced
:Voir aussi cette question SO et cet exemple de github
la source
la source