HTTP PASSTHROUGH البروتوكول القابل للتوصيل ل Firefox
-
13-09-2019 - |
سؤال
كيف يمكنني إجراء بروتوكول HTTP PASSTHROUGH من أجل العمل في فايرفوكس؟
بدلا من ذلك، كيفية تطوير واحد لفيرفوكس؟ أي أمثلة سيكون موضع تقدير.
شكرًا.
المحلول 2
اكتب كائن XPCom ينفذ NsioBserver. ثم قم بإنشاء المستمع لطلب http-on-modify واستجابة http-on-action.
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);
نصائح أخرى
على Firefox، إذا كنت ترغب في تجاوز سلوك افتراضي بطريقة "مثبتة"، يمكنك كتابة NPAPI المكون الإضافي. وبعد دعونا نقول أن الوثائق رقيقة حول هذا الموضوع ... ولكن لكي تبدأك، يمكنك استشارة هذه.
مع البرنامج المساعد NPAPI، يمكنك الوصول إلى نظام التشغيل بأكمله، وبالتالي حرية عرض أي موارد أخرى لفيرفوكس.
اكتب كائن XPCOM الذي ينفذ Nsiprotocolhandler. على سبيل المثال، يمكنك الوصول إلى الصور المحلية من صفحات الويب:
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
كن حذرا! هذا النهج يمكن أن يخلق الضعف
لا تنتمي إلى StackOverflow