0
A
回答
0
編寫實現nsIObserver的XPCOM對象。然後爲http-on-modify-request和http-on-examine-response創建監聽器。
var myObj = new MyObserver(); //implements nsIObserver
var observerService = Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService);
observerService.addObserver(myObj "http-on-modify-request", false);
observerService.addObserver(myObj, "http-on-examine-response", false);
0
在Firefox上,如果您想以「可插拔」的方式繞過默認行爲,您可以編寫NPAPI based plugin。假設文檔在這個主題上很薄弱......但爲了讓你開始,你可以諮詢this。
使用NPAPI插件,您可以訪問整個操作系統,因此可以向Firefox公開任何其他資源。
0
編寫實現nsIProtocolHandler的XPCOM對象。例如,您可以從網頁訪問本地圖片:
const Cu = Components.utils;
const Ci = Components.interfaces;
const Cm = Components.manager;
const Cc = Components.classes;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");+
Cu.import("resource://gre/modules/FileUtils.jsm");
Cu.import("resource://gre/modules/NetUtil.jsm");
/***********************************************************
class definition
***********************************************************/
function sampleProtocol() {
// If you only need to access your component from JavaScript,
//uncomment the following line:
this.wrappedJSObject = this;
}
sampleProtocol.prototype = {
classDescription: "LocalFile sample protocol",
classID: Components.ID("{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"),
contractID: "@mozilla.org/network/protocol;1?name=x-localfile",
QueryInterface: XPCOMUtils.generateQI([Ci.nsIProtocolHandler]),
//interface nsIProtocolHandler
allowPort :function(port, scheme)
{
if ((port == 80)&&(scheme == x-localfile)) {
return true;
}
else
{
return false;
}
},
newChannel: function(aURI)
{
// Just example. Implementation must parse aURI
var file = new FileUtils.File("D:\\temp\\getImage.jpg");
var uri = NetUtil.ioService.newFileURI(file);
var channel = NetUtil.ioService.newChannelFromURI(uri);
return channel;
},
newURI(aSpec, aOriginCharset, aBaseURI)
{
//URI looks like x-localfile://example.com/image1.jpg
var uri = Cc["@mozilla.org/network/simple-uri;1"].createInstance(Ci.nsIURI);
uri.spec = aSpec;
return uri;
},
scheme: "x-localfile",
defaultPort: 80,
protocolFlags: 76
};
var components = [sampleProtocol];
if ("generateNSGetFactory" in XPCOMUtils)
var NSGetFactory = XPCOMUtils.generateNSGetFactory(components); // Firefox 4.0 and higher
else
var NSGetModule = XPCOMUtils.generateNSGetModule(components); // Firefox 3.x
要當心!這種方法可能造成漏洞
相關問題
- 1. Cookie如何在HTTP協議中傳遞?
- 2. 異步可插入協議
- 3. 關於HTTP協議
- 4. 在Java中使用異步可插入協議的HTTP請求
- 5. WebDav協議VS HTTP協議
- 6. firefox 5和協議文件://在http
- 7. 消息傳遞協議
- 8. 使用哪種消息傳遞協議?
- 9. 傳遞數據TextView使用協議
- 10. 使用協議/代理傳遞數組
- 11. 適用於即時消息傳遞的協議
- 12. 爲什麼基於TCP的HTTP協議?
- 13. uwsgi協議比http協議更快嗎?
- 14. Firebase XMPP協議與HTTP協議
- 15. HTTP傳輸錯誤:java.net.MalformedURLException:無協議:REPLACE_WITH_ACTUAL_URL
- 16. mysql_connect()使用http協議
- 17. clojure,用於插入數據庫項目的協議
- 18. HTTP和HTTPS協議
- 19. HTTP協議:僅HTML?
- 20. c#和HTTP協議
- 21. iOS + Android HTTP協議
- 22. HTTP協議工作
- 23. 使用異步插入協議
- 24. 從本地協議強制使用Javascript協議中的http協議
- 25. 用於流式傳輸音頻/視頻輸入的協議
- 26. 異步可插入協議處理程序:轉發到其他協議?
- 27. 使用Three20與HTTP協議以外的其他協議
- 28. LoadRunner Java over HTTP協議與WEB(http/html)協議
- 29. HTTP協議的本質
- 30. 困惑的HTTP協議