2011-10-08 1 views
9

Sono nuovo alle estensioni di Chrome. Mi piacerebbe creare una semplice estensione chrome che mostri un avviso con il titolo della pagina html corrente. quando sto eseguendo: alert(document.title), non lo capisco perché l'oggetto documento non appartiene alla pagina ma allo script di estensione (è corretto?) come ottengo l'oggetto documento giusto?accesso alla pagina html corrente dall'estensione chrome

risposta

3

È possibile utilizzare il tabs module:

chrome.tabs.getCurrent(function(tab) { 
    alert(tab.title); 
}); 
10

script contenuti sono il modo più semplice per andare:

Espandi la tua file manifesto con questo codice:

... 
"content_scripts": [ 
    { 
    "matches": ["http://urlhere/*"], 
    "js": ["contentscript.js"] 
    } 
], 
... 

contenuto dello script (eseguito automaticamente su ogni pagina come detto matches al file manifesto):

alert(document.title) 

Il vantaggio di utilizzare gli script contenuti oltre chrome.extension.* metodi è che l'estensione non richiede sc autorizzazioni ary, come ad esempio tabs.


Consulta anche:

+0

@ Rob W: Ho appena fatto una domanda simile http://stackoverflow.com/questions/1964225/accessing-current-tab -Dom-oggetto-da-popup-html. Ma nel mio caso l'estensione sta inviando le informazioni dalla scheda corrente alla mia app di bookmarking. Il modo in cui comprendo la tua risposta, quindi, qualsiasi pagina che tento di aggiungere ai segnalibri deve essere inclusa nel file manifest. È corretto? In tal caso, sarà inutile. Grazie. – Zeynel

+1

@Zeynel Quindi includi "" * "': '" corrisponde ": [" * "],' –

+0

@ Rob W: Grazie. Potrei non farlo, ma ho dovuto inserire "corrispondenze": ["http: // */*"], 'per farlo funzionare secondo questo http://code.google.com/chrome/extensions /match_patterns.html altrimenti ho ottenuto 'Missing scheme separator' Non l'ho ancora provato ma almeno l'estensione caricata. Grazie ancora. – Zeynel

1

Per cosa stai facendo tutto quello che nee d fare è questo

chrome.tabs.executeScript({ 
    code: 'alert(document.title)' 
}) 

L'API chrome.tabs.executeScript consente di eseguire JavaScript nella pagina corrente invece che nella estensione in modo tale funziona bene, ma se si desidera utilizzare il nome della pagina in seguito in un'estensione più complessa di quanto vorrei solo fare quello che ha fatto pimvdb

+1

Ciò richiederebbe l'aggiunta di 'unsafe-eval' a CSP? – Xan

0

io uso questa estensione per fare una cosa simile:

main.js:

(function(){window.prompt('Page title:', document.title)})()

manifest.json:

{ 
"background": {"scripts": ["background.js"]}, 
"browser_action": { 
"default_title": "popup_title" 
}, 
"name": "popup_title", 
"description": "Display the page title for copying", 
"permissions": [ 
    "tabs", 
    "http://*/*", 
    "https://*/*" 
], 
"version": "1.0", 
"manifest_version": 2 
} 

background.js:

chrome.browserAction.onClicked.addListener(function(tab) { 
    chrome.tabs.executeScript(tab.id, {file: "main.js"}) 
}); 
Problemi correlati