alert()
জাভাস্ক্রিপ্টে ফাংশনটি ওভাররাইড করার সাথে কি কারও অভিজ্ঞতা আছে ?
- কোন ব্রাউজারগুলি এটি সমর্থন করে?
- কোন ব্রাউজার-সংস্করণ এটিকে সমর্থন করে?
- ফাংশনটি ওভাররাইড করার ক্ষেত্রে কী কী বিপদ রয়েছে?
_alert
alert()
জাভাস্ক্রিপ্টে ফাংশনটি ওভাররাইড করার সাথে কি কারও অভিজ্ঞতা আছে ?
_alert
উত্তর:
এটি অবশ্যই "সমর্থিত"। এটি আপনার ওয়েব পৃষ্ঠা, আপনি এটি দিয়ে যা করতে চান তা করেন।
আমি ইতিমধ্যে এটি একটি লাইব্রেরি সংশোধন না করেই ইভেন্ট বিশ্লেষণ করে বিশ্লেষণ ইভেন্টগুলি ট্র্যাক করার জন্য করেছি।
প্রক্সি প্যাটার্নটি ব্যবহার করুন:
(function(proxied) {
window.alert = function() {
// do something here
return proxied.apply(this, arguments);
};
})(window.alert);
আপনি যদি চান তবে মূল ফাংশনে কলকে বাইপাস করতে পারেন (প্রক্সড)
এখানে আরও তথ্য: JQuery প্রকারগুলি # প্রক্সি প্যাটার্ন
apply()
উপলভ্য নয়window.alert
apply
একটি পদ্ধতি Function
। তাহলে তারা অবশ্যই স্পষ্টভাবে এর জন্য সীমাবদ্ধ রাখবে alert
?!
যদিও বেশিরভাগ ব্রাউজারগুলি এটিকে ওভাররাইড করা সমর্থন করে, আপনি এটি দিয়ে কী করছেন তা সম্পর্কে সাবধানতা অবলম্বন করুন।
যেহেতু ডিফল্ট সতর্কতা বাক্সটি এক্সিকিউশন থ্রেডটিকে অবরুদ্ধ করে, তাই এমন কিছু লাইব্রেরি যা এই আচরণের উপর নির্ভর করে সে আর কাজ করবে না (সেরা)।
আপনার ভাল নাগরিক হওয়া উচিত এবং দেশীয় এপিআই স্পর্শ করা এড়ানো উচিত। যদি আপনি এটি করেন তবে আপনি তৃতীয় পক্ষের কোড ব্যবহার করার সময় জিনিসগুলি ভেঙে ফেলতে পারেন।
তবুও, আপনি যদি একটি নির্দিষ্ট প্রসঙ্গে সতর্কতা আচরণটি নতুনভাবে সংজ্ঞায়িত করতে চান তবে আপনি এটি বেনামে কোনও ফাংশন দিয়ে এটিকে বন্ধ করতে পারেন:
/* new funky alert */
function myFunkyAlert(msg) {
/* here goes your funky alert implementation */
alert("Look ma!\n" + msg);
}
(function(alert) { // anonymous function redefining the "alert"
/* sample code */
alert("Hello World!");
})(myFunkyAlert);
ওভারিং সতর্কতা কার্যে কোনও বিপদ নেই। প্রতিটি ব্রাউজার এটি সরবরাহ করে।
উদাহরণ স্বরূপ:
// function over riding. Redirecting to Console with Firebug installed.
function alert(message) {
console.info(message);
}
alert('This is an override.');
alert("Reloading")
ওয়েবপৃষ্ঠায় কল করে এবং পুনরায় লোড করে। সতর্কতা পাঠ্যটি ব্যবহারকারী কখনও দেখেনি seen
আমি মনে করি প্রতিটি জাভাস্ক্রিপ্ট বাস্তবায়ন এটি সমর্থন করবে এবং এর সাথে কোনও বিপদ জড়িত নেই। এটি সাধারণত প্লেইন ওএস-স্টাইলযুক্ত সতর্কতা বাক্সগুলি HTML / CSS এর সাথে আরও মার্জিত কিছুতে প্রতিস্থাপন করার জন্য সম্পন্ন করা হয়। এটি এইভাবে করা মানে আপনার বিদ্যমান কোড পরিবর্তন করতে হবে না! এটি সম্ভব হওয়ার বিষয়টি জাভাস্ক্রিপ্টকে দুর্দান্ত করে তোলে।
অন্যান্য অনেক উত্তরে যেমন বলা হয়েছে, আপনি কেবলমাত্র এর সাথে ফাংশনটি ওভাররাইড করতে পারেন
window.alert = null
অথবা
window.alert = function(){}
তবে এটি অগত্যা Window
কনস্ট্রাক্টরের প্রোটোটাইপে ফাংশনটি ওভাররাইড করে না (মূলধনটি নোট করুন W
), তাই হ্যাকার এখনও টাইপ করতে পারেন:
Window.prototype.alert.apply(window, ["You were hacked!"]);
অতএব, আপনার এই ফাংশনটি ওভাররাইড করা দরকার:
Window.prototype.alert = null
অথবা
Window.prototype.alert = function(){}
Ladislav।
আইই 8-এর জন্য আপনি এইভাবে সতর্কতা () এর নতুন সংজ্ঞা দিতে পারেন
/**
* Definition of global attached to window properties <br/>
*/
(function() {
nalert = window.alert;
Type = {
native: 'native',
custom: 'custom'
};
})();
/**
* Factory method for calling alert().
* It will be call a native alert() or a custom redefined alert() by a Type param.
* This defeinition need for IE
*/
(function(proxy) {
proxy.alert = function () {
var message = (!arguments[0]) ? 'null': arguments[0];
var type = (!arguments[1]) ? '': arguments[1];
if(type && type == 'native') {
nalert(message);
}
else {
document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
}
};
})(this);
এবং কল হিসাবে
alert('Hello, hacker!');
nalert('I am native alert');
alert('Hello, user!', Type.custom);
ওভাররাইড সতর্কতা () ফাংশনটির সাথে আমার অভিজ্ঞতা হ'ল আমরা একবার এটি জাভাস্ক্রিপ্ট লাইব্রেরির ট্রায়াল সংস্করণ "হ্যাক" করতে ব্যবহার করেছি যা "দয়া করে নিবন্ধ করুন!" প্রদর্শিত সময় সময় সতর্কতা মাধ্যমে পর্দা।
আমরা কেবল আমাদের নিজস্ব সতর্কতা () ফাংশন এবং ভয়েলা সংজ্ঞায়িত করেছি।
এটি কেবল পরীক্ষার উদ্দেশ্যে ছিল, আমরা পরে সম্পূর্ণ সংস্করণ কিনেছিলাম, সুতরাং এখানে অনৈতিক কিছুই চলছে না ;-)
আধুনিক ব্রাউজারগুলিতে সমস্ত জাভাস্ক্রিপ্ট বাস্তবায়ন ওভাররাইড সমর্থন করে।
ঝুঁকিগুলি একেবারেই সহজ, আপনি সতর্কতা () হিসাবে সাধারণভাবে পরিচিত ফাংশনগুলিকে ওভাররাইড করে অন্য দলের সদস্যদের একেবারে পাগল করে তুলবেন।
সুতরাং আপনি যদি কোনও উপায়ে বিদ্যমান কোডটি ডিবাগ বা হ্যাক করার সরঞ্জাম হিসাবে ফাংশনগুলিকে ওভাররাইড না করে থাকেন তবে আমি এটি করার কোনও কারণ দেখতে পাচ্ছি না। শুধু একটি নতুন ফাংশন তৈরি করুন।
এটি নিশ্চিত ফায়ারফক্স এবং ie8 এ কাজ করে। আমি দেখতে পাচ্ছি না যে কোনও ব্রাউজার এটি কাজ করবে না। এটি জাভাস্ক্রিপ্ট কীভাবে কাজ করে তার প্রায় মৌলিক, যদিও এটি প্রায়শই এর মতো নেটিভ ফাংশনগুলির সাথে ব্যবহৃত হয় না দেখে =)
সতর্কতাগুলি কোথা থেকে আসছে তা সন্ধান করতে আমি একটি দ্রুত হ্যাক করছি, এটি কনসোলে যেতে হবে এবং তারপরে এটি প্রবেশ করানো হবে
function alert(message) {
console.info(message);
debugger;
}
যখন জেএস ব্রাউজারের ফাংশনগুলির window.alert
কথা আসে তখন এটি প্রখ্যাত এবং সবচেয়ে সুপরিচিত, যারা জেএস জানেন না তারা alert()
নিশ্চিতভাবে নিশ্চিত যে এটি আজ ব্যবহৃত সমস্ত ব্রাউজারগুলিতে সমর্থিত এবং আপনার কোড স্নিপেটও রয়েছে। তবে, alert()
আপনার হিসাবে নির্দিষ্ট ব্যবহারের ক্ষেত্রে আমি ওভাররাইড করব না (এটি ওওপি অর্থে ওভাররাইডের চেয়ে রিফ্যাক্টরিংয়ের মতো) কারণ যখন আপনাকে আসলে alert()
কোনও টেমপ্লেট না দিয়ে ব্যবহার করতে হবে এবং আপনি সম্ভবত এটি করবেন তখন আপনার প্রয়োজন হবে এটি করার জন্য অন্য একটি অ-সতর্কতা কাজ।
প্রকৃত সতর্কতা বার্তাগুলির সাথে আমি একটি ডিফল্ট বার্তা প্রদর্শন করার প্রয়োজনের মুখোমুখি হয়েছি। এইভাবে আমি এটি পরিচালনা করতে পেরেছি।
const actualAlertFunc = window.alert;
window.alert = function(msg) {
actualAlertFunc('some default message '+ msg);
}
আমি এটি ক্রোমে পরীক্ষা করেছি। আমি এটির একটি ভাল অনুশীলন কিনা তা সম্পর্কে নিশ্চিত নই, তবে এটি উদ্দেশ্যটি কার্যকর করে।