There are multiple ways, that all boil down to nsIMimeService
/nsIHandlerService
and nsIMimeInfo
and setting the appropriate nsIHandlerInfo
. E.g. see PDF.js making itself the handler for PDF files (by effectively disabling all handler or plugins and implementing a stream converter), or my answer on how to register a web protocol handler (not mime related but protocol related, but the handler info stuff still applies).
Depending on how you'd like to handle things, you may use the nsIHandlerApp
-ervied interfaces e.g. to pass the uri (protocols) or file (mime) directly to some local or web application, or implement a full blown stream converter like PDF.js.
In theory, it would be also possible to implement new kinds of nsIHandlerApp
-derived interfaces, implementing in particular launchWithURI
(protocols) or launchWithFile
(mime content types and file extensions (downloads)). However, this is a bit tricky as nsIHandlerService
only handles the built-in interfaces.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…