2013-09-30 13 views
16

Ho un'opzione del menu contestuale e quando è selezionata voglio inserire del codice HTML. Ho provato a fare questoCome inserire HTML con un'estensione di Chrome?

var div=document.createElement("div"); 
document.body.appendChild(div); 
div.innerText='test123'; 

Ma non funziona per me.

Nota Sto cercando di evitare l'utilizzo di jQuery.

+7

Lo script contenuti listener di eventi viene eseguito in una pagina di sfondo; stai manipolando quella pagina di sfondo invece della pagina aperta nella scheda attiva del browser. La manipolazione della pagina di una scheda deve essere effettuata da uno [script di contenuto] (http://developer.chrome.com/extensions/content_scripts.html). La pagina di sfondo può utilizzare [message passing] (http://developer.chrome.com/extensions/messaging.html) per segnalare quando lo script di contenuto deve agire. (In alternativa, puoi creare una sorta di script di contenuti al volo usando ['executeScript'] (http://developer.chrome.com/extensions/tabs.html#method-executeScript).) – apsillers

+0

Funziona per me quando lo eseguo nella console ma non nell'estensione. Potresti mandarmi il tuo file in modo che possa esaminarlo, vedere cosa potrei fare di sbagliato? – Ziamor

+4

Penso che @DesertIvy confermi che il tuo script è stato formulato correttamente, non necessariamente che lo stai eseguendo nel posto giusto all'interno della struttura dell'estensione. – apsillers

risposta

24

Here è possibile cercare come creare un'estensione e scaricare l'esempio manifest.json.

Content Scripts può essere utilizzato per eseguire js/css corrispondenti a determinati URL.

manifest.json

{ 
    "name": "Append Test Text", 
    "description": "Add test123 to body", 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "content_scripts": [ 
    { 
     "matches": ["http://*/*"], 
     "js": ["content-script.js"] 
    } 
    ], 
    "browser_action": { 
    "default_title": "Append Test Text" 
    }, 
    "manifest_version": 2 
} 

content-script.js

var div=document.createElement("div"); 
document.body.appendChild(div); 
div.innerText="test123"; 

Quanto sopra si esegue l'content-script.js per tutti gli URL http://*/* dove * è un carattere jolly. quindi praticamente tutte le pagine http.

Gli script di contenuto hanno molte proprietà che possono essere trovate nel link sopra.

Programmatic injection può essere utilizzato quando js/css non deve essere iniettato in ogni pagina che corrisponde al modello.

seguente mostra come eseguire i js onclick dell'icona estensione: -

manifest.json

{ 
    "name": "Append Test Text", 
    "description": "Add test123 to body", 
    "version": "1.0", 
    "permissions": [ 
    "activeTab" 
    ], 
    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 
    "browser_action": { 
    "default_title": "Append Test Text" 
    }, 
    "manifest_version": 1 
} 

background.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript({ 
    code: 'var div=document.createElement("div"); document.body.appendChild(div); div.innerText="test123";' 
    }); 
}); 

Questo utilizza la executeScript metodo, che ha anche un'opzione per chiamare un sep file di arate in questo modo: -

background.js

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript({ 
    file: "insert.js" 
    }); 
}); 

insert.js

var div=document.createElement("div"); 
document.body.appendChild(div); 
div.innerText="test123"; 
Problemi correlati