Quelles interfaces XPCOM dois-je utiliser pour détecter l'ouverture, la fermeture et la commutation des onglets et obtenir leur URL associée à partir d'une extension firefox? J'ai vu des exemples de code qui gèrent des onglets dans JS, mais qu'en est-il de C++?Accès aux onglets sur Firefox avec une extension XPCOM C++
Répondre
Vous pouvez écrire un petit composant JS qui redirigera les événements de tabulation vers votre composant C++ à l'aide de nsIObserverService.
Dans le code C++, vous pouvez utiliser cet extrait pour enregistrer votre composant en tant qu'observateur pour les événements définis par l'utilisateur qui sont utilisés pour le réacheminement des événements de tabulation.
NS_IMETHODIMP MyCppComponent::Observe(nsISupports *aSubject,
const char *aTopic,
const PRUnichar *aData)
{
if(!strcmp(aTopic, "xpcom-startup"))
{
nsCOMPtr<nsIObserverService> observerService =
do_GetService("@mozilla.org/observer-service;1");
observerService->AddObserver(this, "my-tab-open", false);
observerService->AddObserver(this, "my-tab-close", false);
observerService->AddObserver(this, "my-tab-select", false);
}
else if(!strcmp(aTopic, "my-tab-open"))
{
/* . . . */
}
else if(!strcmp(aTopic, "my-tab-close"))
{
/* . . . */
}
else if(!strcmp(aTopic, "my-tab-select"))
{
/* . . . */
}
/* . . . */
}
Et dans le composant d'aide JS vous devez souscrire à des événements de l'onglet et gestionnaires d'événements, vous pouvez extraire les données souhaitées et déclencher des événements définis par l'utilisateur pour exécuter du code C++.
function tabOpened(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-open", "some data");
}
function tabClosed(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-close", "some data");
}
function tabSelected(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.notifyObservers(event.target.linkedBrowser.contentWindow,
"my-tab-select", "some data");
}
function contentWndLoad(event) {
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
var browser = getMostRecentBrowserWindow().getBrowser();
browser.tabContainer.addEventListener("TabOpen", tabOpened, false);
browser.tabContainer.addEventListener("TabClose", tabClosed, false);
browser.tabContainer.addEventListener("TabSelect", tabSelected, false);
}
MyJsComponent.prototype = {
/* . . . */
observe: function(aSubject, aTopic, aData) {
switch(aTopic) {
case "xpcom-startup":
var obsSvc = CC["@mozilla.org/observer-service;1"].
getService(CI.nsIObserverService);
obsSvc.addObserver(this, "toplevel-window-ready", false);
break;
case "toplevel-window-ready":
aSubject.addEventListener("load", contentWndLoad, false);
break;
}
}
/* . . . */
}
De plus, vous devez ajouter du code pour gérer des cas spécifiques. Par exemple, lorsque l'utilisateur ferme la fenêtre du navigateur, vous ne recevrez pas d'événements TabClose pour les onglets ouverts dans cette fenêtre ... Et n'oubliez pas de désinscrire vos observateurs lorsque vous en avez besoin.
Super, c'était exactement ce dont j'avais besoin, l'exemple de code me fera gagner beaucoup de temps !!! Merci un million !!! –
- 1. Écrire une extension Firefox qui utilise des composants XPCOM?
- 2. Extension Firefox, accès au document
- 3. Unité tester une extension firefox?
- 4. variables enfer - problème avec vars et onglets (extension firefox)
- 5. Accès au cache Firefox à partir d'un composant XPCOM
- 6. firefox extension, jquery et accès au document
- 7. XUL - Accès aux informations sur l'image
- 8. Firefox extension ouvrant une page sur l'installation
- 9. Comment écrire rapidement une extension firefox?
- 10. extension firefox sur chaque page
- 11. problème avec variable (extension firefox)
- 12. XMLHttpRequest, extension FireFox et code d'erreur '1012' (Accès refusé)
- 13. C# interop à XPCOM
- 14. Comment utiliser le composant C++ xpcom du composant javascript xpcom
- 15. Extension Joomla Image Renedering avec accès JFactory
- 16. Comment modifier une extension Firefox?
- 17. Variable basée sur l'onglet XPCOM
- 18. Comment distribuer un composant XPCOM via XPI pour FireFox 3?
- 19. Contrôle des onglets dans une extension Chrome
- 20. Développement piloté par test pour le composant C++ XPCOM?
- 21. Comment puis-je porter une extension Google Chrome sur Firefox?
- 22. Firefox: Plugin vs extension?
- 23. Écrire un plug-in Firefox XPCOM avec une interface de fenêtre native? (comme le contrôle ActiveX)
- 24. en utilisant eval.call() dans le composant XPCOM de firefox
- 25. Comment Injecter Javascript avec Firefox Extension
- 26. Compatibilité extension Firefox
- 27. AS3: Extension de la classe Dictionary - Accès aux données stockées
- 28. firefox extension security issue
- 29. Firefox Extension pour résumer sélecteurs CSS sur une page
- 30. Obtenir firefox chrome-window à partir du composant XPCOM
Pourquoi? Vous devriez certainement le faire à partir de JS. – Nickolay