[Google] Come creare un extension per google chrome Thu Sep 01, 2011 1:01 pm
Pubblicato da: Spacca Spacca
Analisi
Uno script viene eseguito al caricamento di ogni pagina (get_domain.js) e passerà l’informazione del dominio (window.location.hostname) allo script in background.html.
if (window == top) {
// Passiamo l'hostname alla background page
chrome.extension.connect().postMessage(window.location.hostname);
}
In background.html vengono attivati i listener che servono ad “ascoltare” i messaggi passati dai content_script e ricevuto un dominio valido (escludiamo gli indirizzi IP), abilitiamo esplicitamente la pageAction che a questo punto verrà mostrata nella barra degli indirizzi
var pageActionId = "WhoIsPageAction";
var hostnames = {};
chrome.extension.onConnect.addListener(function(port) {
// Funzione chiamata del contentScript get_domain.js, che ci passerà l'hostname della tab corrente
port.onMessage.addListener(function(hostname) {
// Niente whois sugli IP
if (!/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.exec(hostname)) {
// Estraiamo il dominio di secondo livello dall'hostname
var matches = /[^\.]+\.[^\.]+$/.exec(hostname);
if (matches.length==1) {
hostnames[port.tab.id] = matches[0];
// Se tutto è andato a buon fine, abilitiamo la pageAction
chrome.pageActions.enableForTab(pageActionId, {tabId: port.tab.id, url: port.tab.url, title: "Check WhoIs", iconId: 0});
}
}
});
});
Con un’altro listener creiamo un’azione per la pageAction, dove, dopo aver recuperato la tab in uso, creiamo un url che punta al servizio online di query whois con il nostro dominio tra i parametri. Con questo url, apriamo una nuova tab del browser e il gioco è fatto
chrome.pageActions[pageActionId].addListener(function(pageActionId, pageActionInfo) {
chrome.windows.getCurrent(function(window) {
chrome.tabs.get(pageActionInfo.tabId, function(tab) {
// Assicuriamoci che la finestra sia ancora selezionata
if (window.focused) {
// Creaiamo l'url del servizio di query whois e apriamolo in una nuova tab
var url = "http://artera.it/whois?s=" + encodeURIComponent(hostnames[pageActionInfo.tabId]);
chrome.tabs.create({url: url, windowId: window.windowId});
}
});
});
});
Rimane solo da fare un po’ di pulizia alla chiusura della tab
chrome.tabs.onRemoved.addListener(function(tabId) {
hostnames[tabId] = null;
});
Testare l’estensione
Durante lo sviluppo dell’estensione è possibile provarla e ricaricarla “al volo” senza doverla prima pacchettizare.
Ecco come fare:
Aprire una nuova tab su chrome://extensions , viene visualizzata una lista delle estensioni installate sul browser.
Cliccare su “+ Developer tools” e quindi su “Load unpacked Extension…”, selezionare quindi la cartella dell’estensione, che apparirà immediatamente in lista e potrà essere ricaricata a piacimento.
Fonte: blog artera
Uno script viene eseguito al caricamento di ogni pagina (get_domain.js) e passerà l’informazione del dominio (window.location.hostname) allo script in background.html.
if (window == top) {
// Passiamo l'hostname alla background page
chrome.extension.connect().postMessage(window.location.hostname);
}
In background.html vengono attivati i listener che servono ad “ascoltare” i messaggi passati dai content_script e ricevuto un dominio valido (escludiamo gli indirizzi IP), abilitiamo esplicitamente la pageAction che a questo punto verrà mostrata nella barra degli indirizzi
var pageActionId = "WhoIsPageAction";
var hostnames = {};
chrome.extension.onConnect.addListener(function(port) {
// Funzione chiamata del contentScript get_domain.js, che ci passerà l'hostname della tab corrente
port.onMessage.addListener(function(hostname) {
// Niente whois sugli IP
if (!/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/.exec(hostname)) {
// Estraiamo il dominio di secondo livello dall'hostname
var matches = /[^\.]+\.[^\.]+$/.exec(hostname);
if (matches.length==1) {
hostnames[port.tab.id] = matches[0];
// Se tutto è andato a buon fine, abilitiamo la pageAction
chrome.pageActions.enableForTab(pageActionId, {tabId: port.tab.id, url: port.tab.url, title: "Check WhoIs", iconId: 0});
}
}
});
});
Con un’altro listener creiamo un’azione per la pageAction, dove, dopo aver recuperato la tab in uso, creiamo un url che punta al servizio online di query whois con il nostro dominio tra i parametri. Con questo url, apriamo una nuova tab del browser e il gioco è fatto
chrome.pageActions[pageActionId].addListener(function(pageActionId, pageActionInfo) {
chrome.windows.getCurrent(function(window) {
chrome.tabs.get(pageActionInfo.tabId, function(tab) {
// Assicuriamoci che la finestra sia ancora selezionata
if (window.focused) {
// Creaiamo l'url del servizio di query whois e apriamolo in una nuova tab
var url = "http://artera.it/whois?s=" + encodeURIComponent(hostnames[pageActionInfo.tabId]);
chrome.tabs.create({url: url, windowId: window.windowId});
}
});
});
});
Rimane solo da fare un po’ di pulizia alla chiusura della tab
chrome.tabs.onRemoved.addListener(function(tabId) {
hostnames[tabId] = null;
});
Testare l’estensione
Durante lo sviluppo dell’estensione è possibile provarla e ricaricarla “al volo” senza doverla prima pacchettizare.
Ecco come fare:
Aprire una nuova tab su chrome://extensions , viene visualizzata una lista delle estensioni installate sul browser.
Cliccare su “+ Developer tools” e quindi su “Load unpacked Extension…”, selezionare quindi la cartella dell’estensione, che apparirà immediatamente in lista e potrà essere ricaricata a piacimento.
Fonte: blog artera