বিবরণ
chrome.events নেমস্পেসে সাধারণ ধরনের API থাকে যা ইভেন্ট ডিসপ্যাচ করে আপনাকে জানায় যে কোনও আকর্ষণীয় কিছু ঘটেছে।
ধারণা ও ব্যবহার
Event হল এমন একটি অবজেক্ট যা কোনও আকর্ষণীয় ঘটনা ঘটলে আপনাকে বিজ্ঞপ্তি পাঠায়। অ্যালার্মের সময় শেষ হয়ে গেলে বিজ্ঞপ্তি পাওয়ার জন্য browser.alarms.onAlarm ইভেন্ট ব্যবহার করার একটি উদাহরণ এখানে দেওয়া হল:
browser.alarms.onAlarm.addListener((alarm) => {
appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});
উদাহরণে যেমন দেখানো হয়েছে, আপনি addListener() ব্যবহার করে বিজ্ঞপ্তির জন্য রেজিস্টার করেন। addListener()-এর আর্গুমেন্ট সবসময় এমন একটি ফাংশন যা আপনি ইভেন্ট ম্যানেজ করার জন্য নির্ধারণ করেন, তবে ফাংশনের প্যারামিটার নির্ভর করে আপনি কোন ইভেন্ট ম্যানেজ করছেন তার উপর। alarms.onAlarm-এর ডকুমেন্টেশন চেক করলে,
আপনি দেখতে পাবেন যে ফাংশনে একটি সিঙ্গল প্যারামিটার আছে: একটি alarms.Alarm অবজেক্ট যাতে অতিবাহিত অ্যালার্ম সম্পর্কে
বিবরণ আছে।
ইভেন্ট ব্যবহার করে এমন API-এর উদাহরণ: alarms, i18n, identity, runtime. বেশিরভাগ chrome API তা করে।
ডিক্লারেটিভ ইভেন্ট হ্যান্ডলার
ডিক্লারেটিভ ইভেন্ট হ্যান্ডলার ডিক্লারেটিভ শর্ত ও অ্যাকশন সহ নিয়ম নির্ধারণ করার উপায় প্রদান করে। জাভাস্ক্রিপ্ট ইঞ্জিনের পরিবর্তে ব্রাউজারে শর্ত মূল্যায়ন করা হয় যা রাউন্ডট্রিপ লেটেন্সি কমায় এবং খুব উচ্চ দক্ষতার জন্য অনুমতি দেয়।
ডিক্লারেটিভ ইভেন্ট হ্যান্ডলার ব্যবহার করা হয়, যেমন ডিক্লারেটিভ কন্টেন্ট API-তে। এই পৃষ্ঠায় সব ডিক্লারেটিভ ইভেন্ট হ্যান্ডলারের অন্তর্নিহিত ধারণা বর্ণনা করা হয়েছে।
নিয়ম
সবচেয়ে সহজ নিয়মে এক বা একাধিক শর্ত এবং এক বা একাধিক অ্যাকশন থাকে:
const rule = {
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
কোনও শর্ত পূরণ হলে, সব অ্যাকশন এক্সিকিউট করা হয়।
শর্ত ও অ্যাকশন ছাড়াও, আপনি প্রতিটি নিয়মের জন্য একটি শনাক্তকারী দিতে পারেন, যা আগে রেজিস্টার করা নিয়ম অনিবন্ধিত করার কাজ সহজ করে এবং নিয়মের মধ্যে অগ্রাধিকার নির্ধারণ করে। নিয়মগুলি একে অপরের সাথে বিরোধ করলে বা নির্দিষ্ট ক্রমে কার্যকর করার প্রয়োজন হলে তবেই অগ্রাধিকার বিবেচনা করা হয়। নিয়মের অগ্রাধিকারের নিম্নক্রম অনুযায়ী অ্যাকশন কার্যকর করা হয়।
const rule = {
id: "my rule", // optional, will be generated if not set.
priority: 100, // optional, defaults to 100.
conditions: [ /* my conditions */ ],
actions: [ /* my actions */ ]
};
ইভেন্ট অবজেক্ট
ইভেন্ট অবজেক্টে নিয়ম কাজ করতে পারে। ইভেন্ট ঘটলে এই ইভেন্ট অবজেক্ট কলব্যাক ফাংশন কল করে না, তবে রেজিস্টার করা কোনও নিয়মে অন্তত একটি পূরণ করা শর্ত আছে কিনা তা পরীক্ষা করে এবং
এই নিয়মের সাথে যুক্ত অ্যাকশনগুলি কার্যকর করে। ডিক্লারেটিভ API-কে সাপোর্ট করে এমন ইভেন্ট অবজেক্টের তিনটি
প্রাসঙ্গিক পদ্ধতি আছে: events.Event.addRules(), events.Event.removeRules() এবং
events.Event.getRules()।
নিয়ম যোগ করুন
নিয়ম যোগ করতে, ইভেন্ট অবজেক্টের addRules() ফাংশন কল করুন। এটি প্রথম প্যারামিটার হিসেবে রুল ইনস্ট্যান্সের অ্যারে
এবং সম্পূর্ণ হওয়ার পরে কল করা হয় এমন কলব্যাক ফাংশন নেয়।
const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});
নিয়মগুলি সফলভাবে যোগ করা হলে, details প্যারামিটারে যোগ করা নিয়মের একটি অ্যারে থাকে যা পাস করা rule_list-এর মতো একই ক্রমে দেখানো হয় যেখানে ঐচ্ছিক প্যারামিটার id এবং priority তৈরি করা মান দিয়ে পূরণ করা হয়। কোনও নিয়ম ভুল হলে, যেমন, এতে ভুল শর্ত বা অ্যাকশন থাকলে, কোনও নিয়ম যোগ করা হয় না এবং কলব্যাক ফাংশন কল করা হলে
runtime.lastError ভেরিয়েবল সেট করা হয়। rule_list-এর প্রতিটি নিয়মে একটি অনন্য শনাক্তকারী থাকতে হবে যা অন্য কোনও নিয়ম বা খালি শনাক্তকারী দ্বারা আগে ব্যবহার করা হয়নি।
নিয়ম সরিয়ে দিন
নিয়মাবলী সরাতে removeRules() ফাংশন কল করুন। এটি প্রথম প্যারামিটার হিসেবে রুল আইডেন্টিফায়ারের ঐচ্ছিক অ্যারে
এবং দ্বিতীয় প্যারামিটার হিসেবে কলব্যাক ফাংশন গ্রহণ করে।
const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});
rule_ids যদি আইডেন্টিফায়ারের অ্যারে হয়, তাহলে অ্যারেতে তালিকাভুক্ত আইডেন্টিফায়ার সহ সব নিয়ম
সরিয়ে দেওয়া হয়। rule_ids যদি কোনও শনাক্তকারী তালিকাভুক্ত করে, যা অজানা, এই শনাক্তকারীকে নীরবে উপেক্ষা করা হয়। rule_ids
undefined হলে, এই এক্সটেনশনের সব রেজিস্টার করা নিয়ম সরিয়ে দেওয়া হয়। নিয়ম সরিয়ে দেওয়া হলে callback()
ফাংশন কল করা হয়।
নিয়ম ফিরিয়ে আনুন
রেজিস্টার করা নিয়মের তালিকা পেতে, getRules() ফাংশন কল করুন। এটি removeRules()-এর মতো একই শব্দার্থবিদ্যা সহ নিয়ম শনাক্তকারীর একটি ঐচ্ছিক অ্যারে এবং একটি কলব্যাক ফাংশন গ্রহণ করে।
const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});
callback() ফাংশনে পাস করা details প্যারামিটারটি পূরণ করা ঐচ্ছিক প্যারামিটার সহ নিয়মের একটি অ্যারে উল্লেখ করে।
পারফর্ম্যান্স
সর্বাধিক পারফর্ম্যান্স পেতে, আপনাকে নিম্নলিখিত নির্দেশিকা মনে রাখতে হবে।
একসাথে অনেক নিয়ম রেজিস্টার ও আনরেজিস্টার করুন। প্রতিটি রেজিস্ট্রেশন বা আনরেজিস্ট্রেশনের পরে, Chrome-কে অভ্যন্তরীণ ডেটা স্ট্রাকচার আপডেট করতে হবে। এই আপডেটটি একটি ব্যয়বহুল অপারেশন।
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1]); browser.declarativeWebRequest.onRequest.addRules([rule2]);
const rule1 = {...}; const rule2 = {...}; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
events.UrlFilter-এ রেগুলার এক্সপ্রেশনের পরিবর্তে সাবস্ট্রিং ম্যাচিংকে অগ্রাধিকার দিন। সাবস্ট্রিং ভিত্তিক ম্যাচিং অত্যন্ত দ্রুত।
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {urlMatches: "example.com/[^?]*foo" } });
const match = new browser.declarativeWebRequest.RequestMatcher({ url: {hostSuffix: "example.com", pathContains: "foo"} });
অনেকগুলি নিয়মের একই অ্যাকশন থাকলে, নিয়মগুলি মার্জ করে একটি নিয়ম তৈরি করুন। একটি শর্ত পূরণ হলেই নিয়ম তার অ্যাকশন ট্রিগার করে। এটি ম্যাচিংয়ের গতি বাড়ায় এবং ডুপ্লিকেট অ্যাকশন সেটের জন্য মেমরি খরচ কমায়।
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule1 = { conditions: [condition1], actions: [new browser.declarativeWebRequest.CancelRequest()] }; const rule2 = { conditions: [condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
const condition1 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'example.com' } }); const condition2 = new browser.declarativeWebRequest.RequestMatcher({ url: { hostSuffix: 'foobar.com' } }); const rule = { conditions: [condition1, condition2], actions: [new browser.declarativeWebRequest.CancelRequest()] }; browser.declarativeWebRequest.onRequest.addRules([rule]);
ফিল্টার করা ইভেন্ট
ফিল্টার করা ইভেন্ট হল এমন একটি মেকানিজম যা শ্রোতাদের আগ্রহের ইভেন্টের একটি সাবসেট নির্দিষ্ট করতে দেয়। যে লিসেনার ফিল্টার ব্যবহার করে, তাকে এমন ইভেন্টের জন্য ডাকা হবে না যা ফিল্টার পাস করে না, এর ফলে লিসেনিং কোড আরও ডিক্লারেটিভ ও দক্ষ হয়ে ওঠে। সার্ভিস ওয়ার্কার-কে এমন ইভেন্ট ম্যানেজ করার জন্য জাগাতে হবে না যেগুলি নিয়ে সে চিন্তিত নয়।
ফিল্টার করা ইভেন্টগুলি ম্যানুয়াল ফিল্টারিং কোড থেকে একটি ট্রানজিশনের অনুমতি দেওয়ার উদ্দেশ্যে করা হয়েছে।
browser.webNavigation.onCommitted.addListener((event) => { if (hasHostSuffix(event.url, 'google.com') || hasHostSuffix(event.url, 'google.com.au')) { // ... } });
browser.webNavigation.onCommitted.addListener((event) => { // ... }, {url: [{hostSuffix: 'google.com'}, {hostSuffix: 'google.com.au'}]});
ইভেন্ট নির্দিষ্ট ফিল্টার সমর্থন করে যা সেই ইভেন্টের জন্য অর্থপূর্ণ। কোনও ইভেন্ট যেসব ফিল্টার সাপোর্ট করে, সেগুলির তালিকা সেই ইভেন্টের ডকুমেন্টেশনের "ফিল্টার" বিভাগে দেখানো হবে।
URL ম্যাচ করার সময় (উপরের উদাহরণের মতো), ইভেন্ট ফিল্টার events.UrlFilter-এর মাধ্যমে প্রকাশ করা যায় এমন একই URL ম্যাচিং
ক্ষমতা সাপোর্ট করে, তবে স্কিম ও পোর্ট ম্যাচিংয়ের ক্ষেত্রে এটি প্রযোজ্য নয়।
ধরন
Event
একটি অবজেক্ট যা Chrome ইভেন্টের জন্য লিসনার যোগ করা এবং সরানোর অনুমতি দেয়।
প্রপার্টি
-
addListener
বাতিল
কোনও ইভেন্টের জন্য ইভেন্ট লিসনার কলব্যাক রেজিস্টার করে।
addListenerফাংশনটি দেখতে এইরকম:(callback: H) => {...}
-
কলব্যাক
H
কোনও ইভেন্ট ঘটলে কল করা হয়। এই ফাংশনের প্যারামিটার ইভেন্টের ধরনের উপর নির্ভর করে।
-
-
addRules
বাতিল
ইভেন্ট ম্যানেজ করার জন্য নিয়ম রেজিস্টার করে।
addRulesফাংশনটি দেখতে এইরকম:(rules: Rule<anyany>[], callback?: function) => {...}
-
getRules
বাতিল
বর্তমানে রেজিস্টার করা নিয়ম দেখায়।
getRulesফাংশনটি দেখতে এইরকম:(ruleIdentifiers?: string[], callback: function) => {...}
-
ruleIdentifiers
string[] ঐচ্ছিক
অ্যারে পাস করা হলে, শুধুমাত্র এই অ্যারেতে থাকা শনাক্তকারী সহ নিয়মগুলি ফেরত দেওয়া হয়।
-
কলব্যাক
ফাংশন
callbackপ্যারামিটারটি দেখতে এইরকম:(rules: Rule<anyany>[]) => void
-
নীয়মগুলি
Rule<anyany>[]
যেসব নিয়ম রেজিস্টার করা হয়েছে, ঐচ্ছিক প্যারামিটারগুলি ভ্যালু দিয়ে পূরণ করা হয়েছে।
-
-
-
hasListener
বাতিল
hasListenerফাংশনটি দেখতে এইরকম:(callback: H) => {...}
-
কলব্যাক
H
শ্রোতা যার রেজিস্ট্রেশন স্ট্যাটাস পরীক্ষা করা হবে।
-
ফেরত দেওয়া
বুলিয়ান
ইভেন্টে কলব্যাক রেজিস্টার করা থাকলে সত্য।
-
-
hasListeners
বাতিল
hasListenersফাংশনটি দেখতে এইরকম:() => {...}-
ফেরত দেওয়া
বুলিয়ান
ইভেন্টে কোনও ইভেন্ট লিসনার রেজিস্টার করা থাকলে ট্রু।
-
-
removeListener
বাতিল
ইভেন্ট থেকে ইভেন্ট লিসনার callback-এর রেজিস্ট্রেশন বাতিল করে।
removeListenerফাংশনটি দেখতে এইরকম:(callback: H) => {...}
-
কলব্যাক
H
লিসেনার যা আনরেজিস্টার করা হবে।
-
-
removeRules
বাতিল
বর্তমানে রেজিস্টার করা নিয়ম অনিবন্ধিত করে।
removeRulesফাংশনটি দেখতে এইরকম:(ruleIdentifiers?: string[], callback?: function) => {...}
-
ruleIdentifiers
string[] ঐচ্ছিক
অ্যারে পাস করা হলে, শুধুমাত্র এই অ্যারেতে থাকা শনাক্তকারী সহ নিয়মগুলি অনিবন্ধিত করা হয়।
-
কলব্যাক
ফাংশন ঐচ্ছিক
callbackপ্যারামিটারটি দেখতে এইরকম:() => void
-
Rule
ইভেন্ট ম্যানেজ করার জন্য ডিক্লেরেটিভ নিয়মের বিবরণ।
প্রপার্টি
-
ক্রিয়াগুলি
যেকোনও[]
কোনও একটি শর্ত পূরণ হলে যেসব অ্যাকশন ট্রিগার করা হয় তার তালিকা।
-
চিকিৎসা সংক্রান্ত অবস্থা
যেকোনও[]
অ্যাকশন ট্রিগার করতে পারে এমন শর্তের তালিকা।
-
id
স্ট্রিং ঐচ্ছিক
ঐচ্ছিক শনাক্তকারী যা এই নিয়মকে রেফার করার অনুমতি দেয়।
-
অগ্রাধিকার
নম্বর ঐচ্ছিক
এই নিয়মের ঐচ্ছিক অগ্রাধিকার। ডিফল্ট হিসেবে ১০০ সেট করা থাকে।
-
ট্যাগ
string[] ঐচ্ছিক
নিয়ম অ্যানোটেট করতে এবং নিয়মের সেটে অপারেশন পারফর্ম করতে ট্যাগ ব্যবহার করা যেতে পারে।
UrlFilter
বিভিন্ন মাপকাঠির জন্য URL ফিল্টার করে। ইভেন্ট ফিল্টার করা দেখুন। সব মাপকাঠিতে ছোট ও বড় হাতের অক্ষরের মধ্যে পার্থক্য করা হয়।
প্রপার্টি
-
cidrBlocks
string[] ঐচ্ছিক
Chrome 123+ ব্রাউজার।* Chrome 148 থেকেURL-এর হোস্ট অংশটি IP অ্যাড্রেস হলে এবং অ্যারেতে নির্দিষ্ট করা যেকোনও CIDR ব্লকে থাকলে ম্যাচ করে।
-
hostContains
স্ট্রিং ঐচ্ছিক
URL-এর হোস্টনেমে নির্দিষ্ট স্ট্রিং থাকলে ম্যাচ করে। হোস্টের নামের কোনও উপাদানে 'foo' প্রিফিক্স আছে কিনা তা পরীক্ষা করতে, hostContains: '.foo' ব্যবহার করুন। এটি 'www.foobar.com' এবং 'foo.com'-এর সাথে মিলে যায়, কারণ হোস্টের নামের শুরুতে একটি অন্তর্নিহিত ডট যোগ করা হয়। একইভাবে, hostContains ব্যবহার করে কম্পোনেন্ট সাফিক্স ('foo.') এবং কম্পোনেন্টের ('.foo.') সাথে সম্পূর্ণ ম্যাচ করানো যেতে পারে। শেষ কম্পোনেন্টের জন্য সাফিক্স ও সম্পূর্ণ ম্যাচিং hostSuffix ব্যবহার করে আলাদাভাবে করতে হবে, কারণ হোস্টের নামের শেষে কোনও ইমপ্লিসিট ডট যোগ করা হয় না।
-
hostEquals
স্ট্রিং ঐচ্ছিক
URL-এর হোস্টের নাম নির্দিষ্ট স্ট্রিংয়ের সাথে মিলে গেলে ম্যাচ করে।
-
hostPrefix
স্ট্রিং ঐচ্ছিক
URL-এর হোস্টের নাম নির্দিষ্ট স্ট্রিং দিয়ে শুরু হলে ম্যাচ করে।
-
hostSuffix
স্ট্রিং ঐচ্ছিক
URL-এর হোস্টের নাম নির্দিষ্ট স্ট্রিং দিয়ে শেষ হলে ম্যাচ করে।
-
originAndPathMatches
স্ট্রিং ঐচ্ছিক
কোয়েরি সেগমেন্ট ও ফ্র্যাগমেন্ট শনাক্তকারী ছাড়া URL যদি নির্দিষ্ট রেগুলার এক্সপ্রেশনের সাথে মিলে যায়, তাহলে এটি ম্যাচ করে। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়। রেগুলার এক্সপ্রেশন RE2 সিনট্যাক্স ব্যবহার করে।
-
pathContains
স্ট্রিং ঐচ্ছিক
URL-এর পাথ সেগমেন্টে নির্দিষ্ট স্ট্রিং থাকলে ম্যাচ করে।
-
pathEquals
স্ট্রিং ঐচ্ছিক
URL-এর পাথ সেগমেন্ট নির্দিষ্ট স্ট্রিংয়ের সাথে মিললে, এটি ম্যাচ করে।
-
pathPrefix
স্ট্রিং ঐচ্ছিক
URL-এর পাথ সেগমেন্ট নির্দিষ্ট স্ট্রিং দিয়ে শুরু হলে ম্যাচ করে।
-
pathSuffix
স্ট্রিং ঐচ্ছিক
URL-এর পাথ সেগমেন্ট নির্দিষ্ট স্ট্রিং দিয়ে শেষ হলে ম্যাচ করে।
-
পোর্ট
(number | number[])[] ঐচ্ছিক
URL-এর পোর্ট নির্দিষ্ট করা পোর্ট তালিকার কোনও একটিতে থাকলে ম্যাচ করে। যেমন,
[80, 443, [1000, 1200]]পোর্ট ৮০, ৪৪৩ এবং ১০০০-১২০০ রেঞ্জের মধ্যে থাকা সব অনুরোধের সাথে ম্যাচ করে। -
queryContains
স্ট্রিং ঐচ্ছিক
URL-এর কোয়েরি সেগমেন্টে নির্দিষ্ট স্ট্রিং থাকলে ম্যাচ করে।
-
queryEquals
স্ট্রিং ঐচ্ছিক
URL-এর কোয়েরি সেগমেন্ট নির্দিষ্ট স্ট্রিংয়ের সাথে মিললে, এটি ম্যাচ করে।
-
queryPrefix
স্ট্রিং ঐচ্ছিক
URL-এর কোয়েরি সেগমেন্ট নির্দিষ্ট স্ট্রিং দিয়ে শুরু হলে ম্যাচ করে।
-
querySuffix
স্ট্রিং ঐচ্ছিক
URL-এর কোয়েরি সেগমেন্ট নির্দিষ্ট স্ট্রিং দিয়ে শেষ হলে ম্যাচ করে।
-
স্কিম
string[] ঐচ্ছিক
URL-এর স্কিম অ্যারেতে উল্লেখ করা যেকোনও স্কিমের সাথে মিললে, ম্যাচ করে।
-
urlContains
স্ট্রিং ঐচ্ছিক
URL-এ (ফ্র্যাগমেন্ট শনাক্তকারী ছাড়া) নির্দিষ্ট স্ট্রিং থাকলে মিলে যায়। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়।
-
urlEquals
স্ট্রিং ঐচ্ছিক
URL (ফ্র্যাগমেন্ট শনাক্তকারী ছাড়া) নির্দিষ্ট স্ট্রিংয়ের সাথে মিললে, এটি ম্যাচ করে। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়।
-
urlMatches
স্ট্রিং ঐচ্ছিক
URL (ফ্র্যাগমেন্ট আইডেন্টিফায়ার ছাড়া) নির্দিষ্ট রেগুলার এক্সপ্রেশনের সাথে মিললে, এটিও মেলে। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়। রেগুলার এক্সপ্রেশন RE2 সিনট্যাক্স ব্যবহার করে।
-
urlPrefix
স্ট্রিং ঐচ্ছিক
URL (ফ্র্যাগমেন্ট আইডেন্টিফায়ার ছাড়া) নির্দিষ্ট স্ট্রিং দিয়ে শুরু হলে ম্যাচ করে। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়।
-
urlSuffix
স্ট্রিং ঐচ্ছিক
URL (ফ্র্যাগমেন্ট আইডেন্টিফায়ার ছাড়া) নির্দিষ্ট স্ট্রিং দিয়ে শেষ হলে ম্যাচ করে। পোর্ট নম্বর ডিফল্ট পোর্ট নম্বরের সাথে মিলে গেলে URL থেকে পোর্ট নম্বর সরিয়ে দেওয়া হয়।