L'emissione di una nuova richiesta solo per ottenere il tipo MIME è un po 'pesante e non affidabile. Ad esempio, se la pagina attualmente visualizzata è il risultato di un invio di un modulo POST, quindi l'emissione di una richiesta GET
di solito non porterà alla stessa pagina.
Se si sta sviluppando un'estensione che richiede spesso l'accesso a queste informazioni, utilizzare l'API chrome.webRequest
per tenere traccia delle risposte. La seguente estensione demo mostra il tipo di contenuto su clic del pulsante del browser:
// background.js
var tabToMimeType = {};
chrome.webRequest.onHeadersReceived.addListener(function(details) {
if (details.tabId !== -1) {
var header = getHeaderFromHeaders(details.responseHeaders, 'content-type');
// If the header is set, use its value. Otherwise, use undefined.
tabToMimeType[details.tabId] = header && header.value.split(';', 1)[0];
}
}, {
urls: ['*://*/*'],
types: ['main_frame']
}, ['responseHeaders']);
chrome.browserAction.onClicked.addListener(function(tab) {
alert('Tab with URL ' + tab.url + ' has MIME-type ' + tabToMimeType[tab.id]);
});
function getHeaderFromHeaders(headers, headerName) {
for (var i = 0; i < headers.length; ++i) {
var header = headers[i];
if (header.name.toLowerCase() === headerName) {
return header;
}
}
}
Note:
- Questa estensione mostra solo il risultato per le schede che vengono caricati dopo viene caricato l'estensione.
- Funziona solo su pagine http/https. ftp :, file :, filesystem :, blob :, data: non è supportato.
- Se il server non specifica un tipo MIME o quando il tipo MIME è
text/plain
, Chrome torna a MIME sniffing a meno che non sia impostato X-Content-Type-Options: nosniff
. Nel primo caso, il tipo MIME rilevato potrebbe essere qualsiasi cosa. In quest'ultimo caso, il tipo MIME predefinito è text/plain
.
Per completezza, ecco un file di manifest.json
che può essere utilizzato per testare il codice precedente:
{
"name": "Click button to see MIME",
"version": "1",
"manifest_version": 2,
"background": {
"scripts": ["background.js"],
"persistent": true
},
"browser_action": {
"default_title": "Show MIME"
},
"permissions": [
"webRequest",
"activeTab",
"*://*/*"
]
}
fonte
2014-01-10 11:18:03
Hai mai sviluppato un'estensione con questa funzionalità? Mi piacerebbe avere un'estensione del genere, ma non voglio imparare a codificarne uno per pochi usi personali. – msbg