ফায়ারফক্সে কারা http অনুরোধটি শুরু করেছিলেন তা কীভাবে চিহ্নিত করবেন?


105

আমি একটি নতুন ফায়ারফক্স অ্যাডন বিকাশ করছি যা ফায়ারফক্সের সমস্ত নেটওয়ার্ক ট্র্যাফিক (HTTP (গুলি) এর সাথে অনুরোধ করে http-on-modify-request)

আমার বর্তমান কোডের সাহায্যে আমি ওয়েব পৃষ্ঠাগুলি / ট্যাবগুলি এবং অন্যান্য সমস্ত উপাদান (আরএসএস ফিড আপডেট, এক্সপিকমের উপাদানগুলি থেকে এক্সএইচআর অনুরোধগুলি, এক্সটেনশনগুলি, এক্সটেনশানগুলির পরিচালক, ইত্যাদি) থেকে পৃথক অনুরোধগুলি পৃথক করতে সক্ষম হয়েছি)

আমি শনাক্ত করতে চাই যে পুরো গোষ্ঠীটিই নয় নির্ভুলতার সাথে কে ট্যাবটির ট্র্যাফিক ব্যতীত অন্য কোনও অনুরোধ শুরু করেছে? (আরএসএস, এক্সপিকমের উপাদানগুলি, এক্সটেনশানগুলি, এক্সটেনশানগুলি পরিচালক, ইত্যাদি)

উদাহরণ: একটি হাইপোটিকাল কাস্টম ভেরিয়েবলের requestRequestorএকটি নির্দিষ্ট অ্যাডোন বা আরএসএস আপডেট ইত্যাদি সনাক্তকরণের মান থাকতে পারে etc.

আমি এই একই প্রশ্নটি খুঁজে পেয়েছি তবে কোনও সমাধান ছাড়াই।

পুরো গোষ্ঠীটি সনাক্ত করার জন্য বর্তমান কোড ( ব্রাউজারটি যা http-on-Modify-অনুরোধ বিজ্ঞপ্তি চালায় ) হ'ল:

Components.utils.import('resource://gre/modules/Services.jsm');
Services.obs.addObserver(httpObs, 'http-on-modify-request', false);
//Services.obs.removeObserver(httpObs, 'http-on-modify-request'); //uncomment this line, or run this line when you want to remove the observer

var httpObs = {
    observe: function (aSubject, aTopic, aData) {
        if (aTopic == 'http-on-modify-request') {
            /*start - do not edit here*/
            var oHttp = aSubject.QueryInterface(Components.interfaces.nsIHttpChannel); //i used nsIHttpChannel but i guess you can use nsIChannel, im not sure why though
            var interfaceRequestor = oHttp.notificationCallbacks.QueryInterface(Components.interfaces.nsIInterfaceRequestor);
            //var DOMWindow = interfaceRequestor.getInterface(Components.interfaces.nsIDOMWindow); //not to be done anymore because: https://developer.mozilla.org/en-US/docs/Updating_extensions_for_Firefox_3.5#Getting_a_load_context_from_a_request //instead do the loadContext stuff below
            var loadContext;
            try {
                loadContext = interfaceRequestor.getInterface(Components.interfaces.nsILoadContext);
            } catch (ex) {
                try {
                    loadContext = aSubject.loadGroup.notificationCallbacks.getInterface(Components.interfaces.nsILoadContext);
                    //in ff26 aSubject.loadGroup.notificationCallbacks was null for me, i couldnt find a situation where it wasnt null, but whenever this was null, and i knew a loadContext is supposed to be there, i found that "interfaceRequestor.getInterface(Components.interfaces.nsILoadContext);" worked fine, so im thinking in ff26 it doesnt use aSubject.loadGroup.notificationCallbacks anymore, but im not sure
                } catch (ex2) {
                    loadContext = null;
                    //this is a problem i dont know why it would get here
                }
            }
            /*end do not edit here*/
            /*start - do all your edits below here*/
            var url = oHttp.URI.spec; //can get url without needing loadContext
            if (loadContext) {
                var contentWindow = loadContext.associatedWindow; //this is the HTML window of the page that just loaded
                //aDOMWindow this is the firefox window holding the tab
                var aDOMWindow = contentWindow.top.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsIDocShellTreeItem).rootTreeItem.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindow);
                var gBrowser = aDOMWindow.gBrowser; //this is the gBrowser object of the firefox window this tab is in
                var aTab = gBrowser._getTabForContentWindow(contentWindow.top); //this is the clickable tab xul element, the one found in the tab strip of the firefox window, aTab.linkedBrowser is same as browser var above //can stylize tab like aTab.style.backgroundColor = 'blue'; //can stylize the tab like aTab.style.fontColor = 'red';
                var browser = aTab.linkedBrowser; //this is the browser within the tab //this is what the example in the previous section gives
                //end getting other useful stuff
            } else {
                Components.utils.reportError('EXCEPTION: Load Context Not Found!!');
                //this is likely no big deal as the channel proably has no associated window, ie: the channel was loading some resource. but if its an ajax call you may end up here
            }
        }
    }
};

9
বাহ এখানে দুর্দান্ত কাজ, আপনি কি এই বিষয়টি দেখেছেন: স্ট্যাকওভারফ্লো / প্রশ্নগুলি / ২২74৮৮6565৫১/২ এটি এমন একটি বিষয় যা আপনি অবদান রাখতে সক্ষম হতে পারেন, আমি কীভাবে আপনি এতদূর সূত্রগুলি সনাক্ত করছেন তা দেখতে খুব আগ্রহী।
Noitidart

4
ফায়ারফক্স অনুরোধে আমার যত বেশি তথ্য আছে আপনার লিঙ্কের জন্য ধন্যবাদ ব্রা ইত্যাদি আমার অ্যাডন আরও ভাল হবে, উন্নত সুরক্ষা অ্যাডোন নিয়ে কাজ করা সহজ নয় যদিও, (এটি অ্যাডোনটি পাবলিক হবে কেবল শখ;) আমি আপনাকে ছেড়ে দেব
গিথুবে

4
এছাড়াও loadContextAndGoodiesআমি এখানে একটি ফাংশন লিখেছি যা কিছু উন্নতি ব্যবহার করতে পারে, আমি এটি কিছুক্ষণ আগে লিখেছিলাম তবে দয়া করে সম্ভব হলে বাড়ান। gist.github.com/Noitidart/… আপনি উপরের কোডটিতে সেই স্নিপেটের একটি পুরানো সংস্করণ ব্যবহার করছেন বলে মনে হয়, সুতরাং এই স্নিপেটটি ব্যবহার করে উপরের কোডটি পরিষ্কার হয়ে যাবে, এবং স্নিপেটে সম্ভবত কিছু বর্ধন রয়েছে (আমি জানি না আমি তুলনা করি না : পি)
নোটিডার্ট

4
হ্যাঁ আমি অন্য
কোডটিতে

4
জনসংযোগের জন্য ধন্যবাদ আমি আপনার জনসংযোগ একটি :) করেছেন
Noitidart

উত্তর:


1

2020 সালের জুন পর্যন্ত, http অনুরোধের অনুরোধকারী ফিল্টারিং / সনাক্তকরণের কোনও আনুষ্ঠানিক পদ্ধতি / উপায় নেই।

বর্তমানে কেবলমাত্র সম্ভাবনাটিই প্রশ্নের কোডে করা হয় যা ওয়েব পৃষ্ঠাগুলি / ট্যাবগুলি এবং ফায়ারফক্সের অন্যান্য উপাদানগুলি (ফিড আপডেট, এক্সটেনশনগুলির অনুরোধ, এক্সপিকমের উপাদানগুলি থেকে এক্সএইচআর অনুরোধ ইত্যাদি) আলাদা করে দেয়।

মন্তব্যে উল্লিখিত হিসাবে এটি ফায়ারফক্সের অভ্যন্তরীণ সীমাবদ্ধতা। বর্তমান ফায়ারফক্সের মূল কোডটি একটি অনুরোধকারী ট্র্যাকিং প্রয়োগ করে না এবং অনুরোধটি কে এবং কেন শুরু করেছিল তা জানে না। ক্রোম দেব সরঞ্জামগুলি সম্প্রতি এই বৈশিষ্ট্যটি পেয়েছে তা জেনে রাখা কার্যকর হতে পারে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.