জাভাস্ক্রিপ্ট: ওভাররাইড সতর্কতা ()


207

alert()জাভাস্ক্রিপ্টে ফাংশনটি ওভাররাইড করার সাথে কি কারও অভিজ্ঞতা আছে ?

  • কোন ব্রাউজারগুলি এটি সমর্থন করে?
  • কোন ব্রাউজার-সংস্করণ এটিকে সমর্থন করে?
  • ফাংশনটি ওভাররাইড করার ক্ষেত্রে কী কী বিপদ রয়েছে?

এটি কি অসীম লুপ নয়?
পুল

1
@ নিক - না, তা নয়। 'সাধারণ' উইন্ডো.এলার্ট ফাংশনটি উইন্ডোকে দেওয়া হবে _ > <এর পরে উইন্ডো.এলার্ট ফাংশনটির নতুন সংজ্ঞা দেওয়া হয়েছে।
ক্রিস

@ রিস্টেরোনাসিড: আপনার কোডটি সিনট্যাক্টিক এবং সিনথেটিক্যালি সুক্ষভাবে ছিল, যদিও এটি @ পেপার ১৩৩37 উল্লেখ করেছে ... সেখানে পুনরাবৃত্তি হওয়ার কোনও সম্ভাবনা নেই ... সংক্ষেপে আপনি প্রথম বারে এক ধরণের এক্সপেনডো টেম্পের সাথে ফাংশন বডিগুলিকে অদলবদল করেছেন । _alert
নন সিকিউটার

আয়ে। প্রশ্নটি অস্পষ্ট না করার জন্য তুমি একটা রোল-ব্যাক
করেছ

উত্তর:


210

এটি অবশ্যই "সমর্থিত"। এটি আপনার ওয়েব পৃষ্ঠা, আপনি এটি দিয়ে যা করতে চান তা করেন।

আমি ইতিমধ্যে এটি একটি লাইব্রেরি সংশোধন না করেই ইভেন্ট বিশ্লেষণ করে বিশ্লেষণ ইভেন্টগুলি ট্র্যাক করার জন্য করেছি।

প্রক্সি প্যাটার্নটি ব্যবহার করুন:

(function(proxied) {
  window.alert = function() {
    // do something here
    return proxied.apply(this, arguments);
  };
})(window.alert);

আপনি যদি চান তবে মূল ফাংশনে কলকে বাইপাস করতে পারেন (প্রক্সড)

এখানে আরও তথ্য: JQuery প্রকারগুলি # প্রক্সি প্যাটার্ন


প্রক্সি প্যাটার্নে +1 প্রকৃতপক্ষে ফানকে ওভাররাইড করতে এবং এটির সাথে छेলাশালী না হওয়ার বিষয়টি নিশ্চিত করে!
জোশ স্টোডোলা

15
ইসস! ইন্টারনেট এক্সপ্লোরার 8 এ apply()উপলভ্য নয়window.alert
সিএলপস

শুনে আমি দুঃখিত .. অবজেক্টের applyএকটি পদ্ধতি Function। তাহলে তারা অবশ্যই স্পষ্টভাবে এর জন্য সীমাবদ্ধ রাখবে alert?!
মাইক গ্লিসন জুনিয়র কৌতুরিয়র

4
তারা অবশ্যই প্রক্সি প্যাটার্নটি ব্যবহার করে ওভাররাইড করেছে: ডি
জোশ স্টোডোলা

পুরানো ব্রাউজারগুলি এটি সমর্থন করে না এবং "উইন্ডো.এলার্ট ="
ক্রিস পিটসম্যান 16

23

যদিও বেশিরভাগ ব্রাউজারগুলি এটিকে ওভাররাইড করা সমর্থন করে, আপনি এটি দিয়ে কী করছেন তা সম্পর্কে সাবধানতা অবলম্বন করুন।

যেহেতু ডিফল্ট সতর্কতা বাক্সটি এক্সিকিউশন থ্রেডটিকে অবরুদ্ধ করে, তাই এমন কিছু লাইব্রেরি যা এই আচরণের উপর নির্ভর করে সে আর কাজ করবে না (সেরা)।

আপনার ভাল নাগরিক হওয়া উচিত এবং দেশীয় এপিআই স্পর্শ করা এড়ানো উচিত। যদি আপনি এটি করেন তবে আপনি তৃতীয় পক্ষের কোড ব্যবহার করার সময় জিনিসগুলি ভেঙে ফেলতে পারেন।

তবুও, আপনি যদি একটি নির্দিষ্ট প্রসঙ্গে সতর্কতা আচরণটি নতুনভাবে সংজ্ঞায়িত করতে চান তবে আপনি এটি বেনামে কোনও ফাংশন দিয়ে এটিকে বন্ধ করতে পারেন:

/* 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);

15

ওভারিং সতর্কতা কার্যে কোনও বিপদ নেই। প্রতিটি ব্রাউজার এটি সরবরাহ করে।

উদাহরণ স্বরূপ:

// function over riding. Redirecting to Console with Firebug installed.
function alert(message) { 
    console.info(message);
} 

alert('This is an override.');

11
সেখানে পারে যদি আপনার প্রতিস্থাপন nonblocking হয় একটি বিপদ হতে। উদাহরণস্বরূপ, কোডটি যা alert("Reloading")ওয়েবপৃষ্ঠায় কল করে এবং পুনরায় লোড করে। সতর্কতা পাঠ্যটি ব্যবহারকারী কখনও দেখেনি seen
মধ্যে Darien

13

আমি মনে করি প্রতিটি জাভাস্ক্রিপ্ট বাস্তবায়ন এটি সমর্থন করবে এবং এর সাথে কোনও বিপদ জড়িত নেই। এটি সাধারণত প্লেইন ওএস-স্টাইলযুক্ত সতর্কতা বাক্সগুলি HTML / CSS এর সাথে আরও মার্জিত কিছুতে প্রতিস্থাপন করার জন্য সম্পন্ন করা হয়। এটি এইভাবে করা মানে আপনার বিদ্যমান কোড পরিবর্তন করতে হবে না! এটি সম্ভব হওয়ার বিষয়টি জাভাস্ক্রিপ্টকে দুর্দান্ত করে তোলে।


12

অন্যান্য অনেক উত্তরে যেমন বলা হয়েছে, আপনি কেবলমাত্র এর সাথে ফাংশনটি ওভাররাইড করতে পারেন

window.alert = null

অথবা

window.alert = function(){}

তবে এটি অগত্যা Windowকনস্ট্রাক্টরের প্রোটোটাইপে ফাংশনটি ওভাররাইড করে না (মূলধনটি নোট করুন W), তাই হ্যাকার এখনও টাইপ করতে পারেন:

Window.prototype.alert.apply(window, ["You were hacked!"]);

অতএব, আপনার এই ফাংশনটি ওভাররাইড করা দরকার:

Window.prototype.alert = null

অথবা

Window.prototype.alert = function(){}

এটি অগত্যা অন্যান্য ফ্রেমের ক্রিয়াকে ওভাররাইড করে না। দেখতে jsfiddle.net/18znqbjd/1
রবার্ট

রবার্ট: হ্যাঁ এবং ভাল কারণে। বিভিন্ন ফ্রেম মূলত বিভিন্ন HTML ডকুমেন্ট, প্রতিটি জাভাস্ক্রিপ্টের নিজস্ব "উদাহরণ" সহ।
রলফ

আপনি কি উইন্ডো.প্রোটোটাইপ.এলার্টটি 2017 সালে এখনও একটি ফাংশন হিসাবে নিশ্চিত? : পি
iplus26

6

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);

4

ওভাররাইড সতর্কতা () ফাংশনটির সাথে আমার অভিজ্ঞতা হ'ল আমরা একবার এটি জাভাস্ক্রিপ্ট লাইব্রেরির ট্রায়াল সংস্করণ "হ্যাক" করতে ব্যবহার করেছি যা "দয়া করে নিবন্ধ করুন!" প্রদর্শিত সময় সময় সতর্কতা মাধ্যমে পর্দা।

আমরা কেবল আমাদের নিজস্ব সতর্কতা () ফাংশন এবং ভয়েলা সংজ্ঞায়িত করেছি।

এটি কেবল পরীক্ষার উদ্দেশ্যে ছিল, আমরা পরে সম্পূর্ণ সংস্করণ কিনেছিলাম, সুতরাং এখানে অনৈতিক কিছুই চলছে না ;-)


3

আধুনিক ব্রাউজারগুলিতে সমস্ত জাভাস্ক্রিপ্ট বাস্তবায়ন ওভাররাইড সমর্থন করে।

ঝুঁকিগুলি একেবারেই সহজ, আপনি সতর্কতা () হিসাবে সাধারণভাবে পরিচিত ফাংশনগুলিকে ওভাররাইড করে অন্য দলের সদস্যদের একেবারে পাগল করে তুলবেন।

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


2

এটি নিশ্চিত ফায়ারফক্স এবং ie8 এ কাজ করে। আমি দেখতে পাচ্ছি না যে কোনও ব্রাউজার এটি কাজ করবে না। এটি জাভাস্ক্রিপ্ট কীভাবে কাজ করে তার প্রায় মৌলিক, যদিও এটি প্রায়শই এর মতো নেটিভ ফাংশনগুলির সাথে ব্যবহৃত হয় না দেখে =)


1
ব্রাউজারটি বিশেষত টার্গেট করতে আইআই 6 হবে অন্যদের সম্ভবত এটির সাথে ঠিক আছে।
অ্যান্থনিডাব্লু জোন্স

1

সতর্কতাগুলি কোথা থেকে আসছে তা সন্ধান করতে আমি একটি দ্রুত হ্যাক করছি, এটি কনসোলে যেতে হবে এবং তারপরে এটি প্রবেশ করানো হবে

function alert(message) { 
  console.info(message);
  debugger;
} 

0

যখন জেএস ব্রাউজারের ফাংশনগুলির window.alertকথা আসে তখন এটি প্রখ্যাত এবং সবচেয়ে সুপরিচিত, যারা জেএস জানেন না তারা alert()নিশ্চিতভাবে নিশ্চিত যে এটি আজ ব্যবহৃত সমস্ত ব্রাউজারগুলিতে সমর্থিত এবং আপনার কোড স্নিপেটও রয়েছে। তবে, alert()আপনার হিসাবে নির্দিষ্ট ব্যবহারের ক্ষেত্রে আমি ওভাররাইড করব না (এটি ওওপি অর্থে ওভাররাইডের চেয়ে রিফ্যাক্টরিংয়ের মতো) কারণ যখন আপনাকে আসলে alert()কোনও টেমপ্লেট না দিয়ে ব্যবহার করতে হবে এবং আপনি সম্ভবত এটি করবেন তখন আপনার প্রয়োজন হবে এটি করার জন্য অন্য একটি অ-সতর্কতা কাজ।


0

প্রকৃত সতর্কতা বার্তাগুলির সাথে আমি একটি ডিফল্ট বার্তা প্রদর্শন করার প্রয়োজনের মুখোমুখি হয়েছি। এইভাবে আমি এটি পরিচালনা করতে পেরেছি।


    const actualAlertFunc = window.alert;
    window.alert = function(msg) {
         actualAlertFunc('some default message '+ msg);
    }

আমি এটি ক্রোমে পরীক্ষা করেছি। আমি এটির একটি ভাল অনুশীলন কিনা তা সম্পর্কে নিশ্চিত নই, তবে এটি উদ্দেশ্যটি কার্যকর করে।

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