2011-01-12 8 views
7

Sto provando a creare un'estensione per Chrome che appare come un'icona nella barra degli indirizzi che, quando si fa clic, imposta contenteditable = true su tutti gli elementi della pagina, e quindi quando viene fatto clic nuovamente li riporta a contenteditable = false.Come faccio a visualizzare un'icona di estensione della pagina di Chrome nella barra degli indirizzi?

Tuttavia, sto cadendo al primo ostacolo ... L'icona non viene nemmeno visualizzata nella barra degli indirizzi.

Ecco il mio file manifesto:

{ 
    "name": "Caret", 
    "version": "1.0", 
    "description": "Allows you to edit the content on any webpage", 
    "page_action": { 
    "default_icon": "icon.png" 
    }, 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["jquery.js", "caret.js"] 
    } 
    ], 
    "permissions" : [ 
    "tabs" 
    ] 
} 

ed ecco lo script caret.js:

chrome.browserAction.onClicked.addListener(function(Tab) { 

    $("*").attr("contenteditable",true); 

}); 

Questo è il mio primo tentativo di un interno, quindi è abbastanza probabilmente un errore newbie, ma io apprezzare davvero qualsiasi aiuto o consiglio!

+0

Questo non è più possibile a causa di un cambiamento in Chrome. la risposta di ropstah dovrebbe essere contrassegnata come corretta. –

risposta

16

Ok, risulta avevo bisogno di usare chrome.pageAction.show(tab.id);, il che significava che avevo bisogno di ottenere l'ID della scheda corrente, che si ottiene con:

chrome.tabs.getSelected(null, function(tab) { 

    chrome.pageAction.show(tab.id); 


}); 

MA si scopre non è possibile utilizzare chrome.tabs all'interno di uno script di contenuto, quindi ho dovuto passare a utilizzare una pagina di sfondo, invece.

+0

Ad esempio, è possibile aggiungere questo JSON al file manifest. "background": { "script": [ ""] my_background_script.js } poi mettere il JavaScript che visualizza l'icona pagina in my_background_script.js. – devdanke

+0

C'è anche un'ottima risposta qui: http://stackoverflow.com/a/12574427/1030960 – Anto

+1

@Chris Armstrong non ho potuto ottenere l'icona di azione della pagina, anche seguito questa risposta :( –

3

My answer to this other question fornisce la soluzione. Cordiali saluti, il secondo problema di codice osservato in quella risposta è rilevante anche per il tuo codice: vuoi che l'icona appaia per tutte le pagine, quindi dovresti usare browser_action, non page_action. O funzionerà, ma l'utilizzo di un'azione di pagina su ogni pagina va contro le convenzioni e rende l'esperienza dell'utente meno coerente.

0

ho fatto questo:

chrome.tabs.onUpdated.addListener(function(id, info, tab){ 
    if (tab.url.toLowerCase().indexOf("contratado.me") > -1){ 
    chrome.pageAction.show(tab.id); 
    } 
}); 
1

Ho avuto un problema simile, qui sono i passi che ho seguito per risolverlo:

ho modificato il mio manifest.json per includere il seguente:

{ 
    "background": { 
    "scripts": ["background.js"], 
    "persistent":false 
    }, 
    "page_action": { 
    "default_icon": "logo.png", 
    "default_title": "onhover title", 
    "default_popup": "popup.html" 
    } 
} 

Quindi ho inserito il seguente codice nel mio script in background:

// When the extension is installed or upgraded ... 
    chrome.runtime.onInstalled.addListener(function() { 
     // Replace all rules ... 
     chrome.declarativeContent.onPageChanged.removeRules(undefined, function() { 
     // With a new rule ... 
     chrome.declarativeContent.onPageChanged.addRules([ 
      { 
      // That fires when on website and has class 
      conditions: [ 
       new chrome.declarativeContent.PageStateMatcher({ 
       pageUrl: { hostContains: 'myurl', schemes: ['https', 'http'] }, 
       css: [".cssClass"] 
       }) 
      ], 
      // And shows the extension's page action. 
      actions: [ new chrome.declarativeContent.ShowPageAction() ] 
      } 
     ]); 
     }); 
    }); 

La documentazione per questa può essere trovato qui ... https://developer.chrome.com/extensions/declarativeContent