2012-12-08 13 views
5

Jestem w trakcie pisania rozszerzenia Google Chrome, w szczególności lekkiego czytnika EPUB, którego celem jest tak samo proste jak wbudowany czytnik PDF w Chrome.Wywołaj lub wywołuj rozszerzenie Chrome z mime type

Próbuję dowiedzieć się, czy można to jakoś wywołać rozszerzenie automagicznie po kliknięciu łącza, które normalnie zmusić cię do zapisania pliku epub na dysku.

W idealnym świecie każdy link do pliku epub wskazywałby na file.epub i można użyć skryptu zawartości, aby wskazać to na rozszerzenie, ale niestety częściej niż nie jest to prawdą. Więc myślę, że to musiało zostać wywołane po tym, jak żądanie HTTP get zwróciło przynajmniej nagłówki i wyzwolić typ mime przez chrome.webRequest lub coś podobnego.

Czy można wywołać rozszerzenie Google Chrome z typu MIME pliku, który jest dla Ciebie dostarczany?

+1

Według mojej wiedzy nie ma obecnie możliwości zarejestrowania rozszerzenia jako określonego procesora plików. Twoja opcja polega na przechwytywaniu żądań sieciowych i jeśli wykryjesz plik epub (przez rozszerzenie pliku lub nagłówek Content-Type 'application/epub'), skopiuj adres URL i otwórz go w nowej karcie pod kontrolą twojego rozszerzenia. Prostszym sposobem jest dodanie komendy do 'contextMenus' i działanie w linkach do ebups. – Stan

Odpowiedz

0

Zakładając, że mają działanie przeglądarki dla wszystkich funkcji, można wykryć i włączyć \ wyłączyć rozszerzenie z chrome.webRequest.onHeadersReceived, chrome.browserAction.enable() i chrome.browserAction.disable()

pseudokod

manifest.json

{ 
    "name": "Detect Mime type", 
    "version": "1.0", 
    "description": "Detecting Mime type and enabling browser action", 
    "permissions": ["webRequest", "webRequestBlocking", 
        "<all_urls>"], 
    "background": { 
    "scripts": ["background.js"] 
    }, 
    "browser_action":{ 
    "default_popup":"popup.html", // Use you related code here 
    "default_icon":"icon.jpg" 
    },  
    "manifest_version": 2 
} 

background.js

chrome.webRequest.onHeadersReceived.addListener(function (object){ 
    // Do your code for related header(s) 
    //Invoke chrome.browserAction.enable(integer tabId) or chrome.browserAction.disable(integer tabId) 
},{urls: ["<all_urls>"]}); 
chrome.tabs.query({"status":"complete"}, function(tabs){ 
    //Disable all browser actions using chrome.browserAction.disable(integer tabId) 
}); 

Daj mi znać, jeśli potrzebujesz więcej informacji.