Chrome কনসোলটি খোলা আছে কিনা তা সন্ধান করুন


142

ফায়ারব্যাগ খোলা আছে কিনা তা জানতে আমি এই ছোট স্ক্রিপ্টটি ব্যবহার করছি:

if (window.console && window.console.firebug) {
    //is open
};

এবং এটি ভাল কাজ করে। গুগল ক্রোমের অন্তর্নির্মিত ওয়েব বিকাশকারী কনসোলটি খোলা আছে কিনা তা সনাক্ত করার জন্য এখন আমি আধ ঘন্টা অনুসন্ধান করছিলাম, তবে আমি কোনও ইঙ্গিত খুঁজে পাইনি।

এই:

if (window.console && window.console.chrome) {
    //is open
};

কাজ করে না

সম্পাদনা করুন:

সুতরাং দেখে মনে হচ্ছে যে Chrome কনসোলটি খোলা আছে কিনা তা সনাক্ত করা সম্ভব নয়। তবে একটি " হ্যাক " রয়েছে যা কিছু ত্রুটিগুলি সহ:

  • কনসোলটি আনডকড করা অবস্থায় কাজ করবে না
  • পৃষ্ঠা লোডে কনসোল খোলা থাকলে কাজ করবে না

সুতরাং, আমি আপাতত স্বাক্ষরযুক্ত উত্তরগুলি বেছে নেব, তবে যদি কেউ 1 একটি উজ্জ্বল ধারণা নিয়ে আসে তবে তিনি এখনও উত্তর দিতে স্বাগত এবং আমি নির্বাচিত উত্তরটি পরিবর্তন করব! ধন্যবাদ!



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

আমি একটি ত্রুটি নিক্ষেপ করার মতো জিনিসগুলি চেষ্টা করে এসেছি এবং এনেছি কিনা তা দেখুন .message(যা আপনি যখন বার্তাটি দেখেন তখন ডিবাগারটি খোলা থাকে) তবে দুর্ভাগ্যক্রমে এটিও ঘটে যখন ডিবাগারটি খোলা থাকে না। আমি এটির জন্য যদি একটি হ্যাক জানতে চাই ...
pimvdb

4
@ স্পডলি এটি আমার কেন প্রয়োজন তা প্রশ্নের সাথে প্রাসঙ্গিক নয় এবং আমি ব্যাখ্যা শুরু করতে চাই না। আমি জানি যে 1 জনকে ডিবাগিং থেকে রোধ করার কোনও উপায় নেই তবে আমি যা করার চেষ্টা করছি তা তা নয়। আমি কেবল কনসোলটি খোলা আছে কিনা তা জানার একটি উপায় বের করার চেষ্টা করছি। সব ঠিক আছে :)
r0skar

1
জেএফওয়াইআই কনসোল.প্রফাইলেস পদ্ধতিটি সম্প্রতি কনসোল এপিআই থেকে সরানো হয়েছে src.chromium.org/viewvc/blink?view=revision&revision=151136
লুইলো

উত্তর:


97

অনুরোধঅ্যানিমেশনফ্রেম (শেষ দেরী 2019)

পূর্ববর্তী উত্তরগুলি এখানে historicalতিহাসিক প্রসঙ্গে রেখে দেওয়া হচ্ছে। বর্তমানে মুহাম্মদ ওমর এর পদক্ষেপ ক্রোম 78 উপর কাজ করে, উভয় ঘনিষ্ঠ এবং খোলা ঘটনা সনাক্ত করতে অতিরিক্ত সুবিধা দিয়ে।

স্ট্রিং টু স্ট্রিং (2019)

এই উত্তরটির জন্য ওভারক্লক 9 এর মন্তব্যে ক্রেডিট /./একটি খালি ফাংশন অবজেক্টের সাথে রেজেক্সকে প্রতিস্থাপন করা এখনও কাজ করে।

var devtools = function() {};
devtools.toString = function() {
  if (!this.opened) {
    alert("Opened");
  }
  this.opened = true;
}

console.log('%c', devtools);
// devtools.opened will become true if/when the console is opened

রিজেক্স টু স্ট্রিং (2017-2018)

যেহেতু মূল প্রশ্নকর্তা আর আশেপাশে নেই বলে মনে হয় এবং এটি এখনও গ্রহণযোগ্য উত্তর, দৃশ্যমানতার জন্য এই সমাধানটি যুক্ত করে। ক্রেডিট যায় Antonin Hildebrand এর মন্তব্য উপর zswang s 'এর উত্তর । এই সমাধানটি toString()কনসোলটি খোলা না থাকলে লগ হওয়া অবজেক্টগুলিতে ডাকা হয় না এমন সত্যের সুবিধা নেয় ।

var devtools = /./;
devtools.toString = function() {
  if (!this.opened) {
    alert("Opened");
  }
  this.opened = true;
}

console.log('%c', devtools);
// devtools.opened will become true if/when the console is opened

কনসোল. প্রোফাইলগুলি (2013)

আপডেট: console.profiles ক্রোম থেকে সরানো হয়েছে। এই সমাধানটি আর কাজ করে না।

পল আইরিশকে প্রোফাইলার ব্যবহার করে ডিসকভার ডেভটুলস থেকে এই সমাধানটি নির্দেশ করার জন্য ধন্যবাদ :

function isInspectOpen() {
  console.profile();
  console.profileEnd();
  if (console.clear) {
    console.clear();
  }
  return console.profiles.length > 0;
}
function showIfInspectIsOpen() {
  alert(isInspectOpen());
}
<button onClick="showIfInspectIsOpen()">Is it open?</button>

উইন্ডো.নিরহাইট (২০১১)

এই অন্যান্য বিকল্পটি পৃষ্ঠাটি লোড হওয়ার পরে ডকড ইন্সপেক্টরকে খোলার শনাক্ত করতে পারে , তবে কোনও পূর্ববর্তী তদন্তকারীকে সনাক্ত করতে সক্ষম হবে না, বা যদি পরিদর্শকটি পৃষ্ঠা লোডে ইতিমধ্যে খোলা ছিল open মিথ্যা ধনাত্মক হওয়ার সম্ভাবনাও রয়েছে is

window.onresize = function() {
  if ((window.outerHeight - window.innerHeight) > 100) {
    alert('Docked inspector was opened');
  }
}


1
পথ TypeError: সম্পত্তি 'দৈর্ঘ্য' isInspectOpen () মধ্যে অনির্ধারিত পড়তে পারছেন না
সন্দীপ

2
একটা ব্যাপার নতুন : নতুন সবচেয়ে ভালো উপায় (ক্রেডিট: @zswang) stackoverflow.com/questions/7798748/...
ভিকি Chijwani

3
'টুস্ট্রিং (2017)' এর সমাধান ক্রোমে কাজ করে না
রিচার্ড চ্যান

2
টোস্ট্রিং ক্রোমে স্থির করা হয়েছে বলে মনে হচ্ছে। সম্পাদনা করুন। প্রকৃতপক্ষে এটি কার্যকর হয় যদি আপনি একটি function() {}
রেজিজের

1
@ ওভারক্লক 9 পরীক্ষা আপনার সমাধান সর্বশেষতম ক্রোম 77 আপডেট হওয়া পর্যন্ত কাজ করছে। আপনি কি আমাদের একদম সঠিক দিক নির্দেশ করতে পারেন?
আগস্টিন হালার

118

ক্রোম 65+ (2018)

r = /./
r.toString = function () {
    document.title = '1'
}
console.log('%c', r);

ডেমো: https://jsbin.com/cecuzeb/edit?output (2018-03-16 এ আপডেট)

প্যাকেজ: https://github.com/zswang/jdetects


"উপাদান" মুদ্রণের সময় ক্রোম বিকাশকারী সরঞ্জামগুলি তার আইডি পাবে

var checkStatus;

var element = document.createElement('any');
element.__defineGetter__('id', function() {
    checkStatus = 'on';
});

setInterval(function() {
    checkStatus = 'off';
    console.log(element);
    console.clear();
}, 1000);

অন্য সংস্করণ (মন্তব্যগুলি থেকে)

var element = new Image();
Object.defineProperty(element, 'id', {
  get: function () {
    /* TODO */
    alert('囧');
  }
});
console.log('%cHello', element);

নিয়মিত চলক মুদ্রণ করুন :

var r = /./;
r.toString = function() {
  document.title = 'on';
};
console.log(r);

3
দুর্দান্ত উত্তর। যুক্ত করার একটি বিষয় ... এমডিএন বলছে হ্রাস __defineGetter__করা হয়েছে তাই আমি পরিবর্তিত হয়েছি Object.defineProperty(element, 'id', {get:function() {checkStatus='on';}});... এখনও কাজ করছি।
denikov

5
এছাড়াও কনসোল যত তাড়াতাড়ি কনসোল প্রর্দশিত উপাদান 'পড়া' হবে, তাই আপনি শুধু একবার প্রিন্ট পারে এবং মাত্র সংগ্রহকারী ফাংশন জন্য অপেক্ষা পরিবর্তে একটি সেটিং চালানোsetInterval
xpy

8
এই আবিষ্কারের ভিত্তিতে আমি কম হস্তক্ষেপ পদ্ধতি আবিষ্কার করতে সক্ষম হয়েছি। কনসোলতে মুদ্রণ করার সময় ডিভটুলগুলি ফাংশনগুলিতে স্ট্রিং () এ কল করে। সুতরাং যে কেউ একটি স্ট্রিং () পদ্ধতিতে কাস্টম ফাংশন অবজেক্টটি মুছে ফেলতে পারে খালি স্ট্রিংটি ফেরত দিয়ে। অতিরিক্ত হিসাবে আপনি কনসোল বিন্যাস স্ট্রিং% সি ব্যবহার করতে পারেন এবং রঙ সেট করতে পারেন: সম্ভাব্য মুদ্রিত পাঠ্য প্রিন্টগুলি অদৃশ্য হিসাবে নিশ্চিত করার জন্য স্বচ্ছ। আমি এই কৌশলটি এখানে ব্যবহার করেছি: github.com/binaryage/cljs-devtools/blob/…
হিলডেব্র্যান্ড

3
বছর 2017 এখানে। ক্রোম এখনও এগুলি না খুলে কনসোল করার জন্য জিনিসগুলি লিখে writes এবং আপনার হ্যাক আর কাজ করে না।
ভোটহাইসন

2
ফায়ারফক্সে পরীক্ষিতরা ইন্সপেকশন এলিমেন্ট (কিউ) এর সাথে কাজ করে না এবং ফায়ারব্যাগ দিয়ে এলিমেন্ট পরিদর্শন করে
আসিফ আশরাফ

27

খুব নির্ভরযোগ্য হ্যাক

মূলত সম্পত্তিটিতে একটি গেটর সেট করুন এবং কনসোলে এটি লগ করুন। দৃশ্যত জিনিসটি তখনই অ্যাক্সেস পায় যখন কনসোল খোলা থাকে।

https://jsfiddle.net/gcdfs3oo/44/

var checkStatus;

var element = new Image();
Object.defineProperty(element, 'id', {
  get: function() {
    checkStatus='on';
    throw new Error("Dev tools checker");
  }
});

requestAnimationFrame(function check() {
  checkStatus = 'off';
  console.dir(element);
  document.querySelector('#devtool-status').className  = checkStatus;
  requestAnimationFrame(check);
});
.on{
  color:limegreen;
}

.off{
  color:red;
}
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.7.1/css/all.css" integrity="sha256-DVK12s61Wqwmj3XI0zZ9MFFmnNH8puF/eRHTB4ftKwk=" crossorigin="anonymous" />

<p>
  <ul>
    <li>
      dev toolbar open: icon is <span class="on">green</span>
    </li>
    <li>
      dev toolbar closed: icon is <span class="off">red</span>
    </li>
  </ul>
</p>
<div id="devtool-status"><i class="fas fa-7x fa-power-off"></i></div>
<br/>
<p><b>Now press F12 to see if this works for your browser!</b></p>


ক্রোম সংস্করণ ✅ ✅ 21
কিংবদন্তি

4
কিসের throw new Error("Dev tools checker");জন্য? কারণ এটি ছাড়া এটি কাজ করে।
কিংবদন্তি

এটি কনসোলকে স্প্যামে প্রদর্শিত হবে (কখন খোলা হবে)? যা আমি ধরে নিয়েছি কিছু দিন পরে উল্লেখযোগ্য পরিমাণে স্মৃতি খেতে শুরু করবে :)
পাইথোনেটর

একমাত্র উপায় যা 2020.7 হিসাবে কাজ করে
লাইক

24

আমি ডেভটুলস-ডিটেক্ট তৈরি করেছি যা ডিভটুলগুলি খুললে সনাক্ত করে যা:

console.log('is DevTools open?', window.devtools.open);

আপনি একটি ইভেন্ট শুনতে পারেন:

window.addEventListener('devtoolschange', function (e) {
    console.log('is DevTools open?', e.detail.open);
});

ডেভটুলগুলি আনডকড করা অবস্থায় এটি কাজ করে না। তবে, ক্রোম / সাফারি / ফায়ারফক্স ডেভটুলস এবং ফায়ারব্যাগের সাথে কাজ করে।


@ বার্বুশিন আমার ধারণা আপনার খোলা ডেভটোল ডকড, এটি পৃথক উইন্ডো সনাক্ত করতে পারে না।
মিথিল

দুঃখের সাথে এটি ক্রোম github.com/sindresorhus/devtools-detect/issues/40
laike9m

15

Chrome কনসোলটি খোলা আছে কি না তা বলার জন্য আমি একটি উপায় খুঁজে পেয়েছি। এটি এখনও একটি হ্যাক তবে এটি আরও সঠিক এবং এটি আবহাওয়ার কাজ করবে যে কনসোলটি আনডকড হয়েছে বা না।

মূলত কনসোল বন্ধ হয়ে এই কোডটি চালাতে প্রায় 100 ডলার মাইক্রোসেকেন্ড লাগে এবং কনসোলটি খোলার সময় এটি প্রায় দ্বিগুণ ~ 200 মাইক্রোসেকেন্ড নেয়।

console.log(1);
console.clear();

(1 মিলিসেকেন্ড = 1000 মাইক্রোসেকেন্ড)

আমি এটি সম্পর্কে এখানে আরও লিখেছি ।

ডেমো এখানে আছে


হালনাগাদ:

@ zswang বর্তমান সেরা সমাধান খুঁজে পেয়েছে - তার উত্তরটি দেখুন


1
এটি খুব ভুল সমাধান। এটি গুগল করুন -> "রেস হ্যাজার্ড"। ধীর বা দ্রুত কম্পিউটার এবং ...?
18 সি

1
"রেস হ্যাজার্ড" এখানে সম্পর্কিত নয়। কনসোলটি খুললে সর্বদা আপেক্ষিক slিলে হয়।
গুয়া

1
আপেক্ষিক স্লোনেস কিন্তু সর্বদা 100 বা 200 মিমি নয়। এভাবে রেস হ্যাজার্ড BTW। আপনি যদি একই সময়ে একটি গেম খেলেন, তবে এই "সমাধান" মিথ্যা ইতিবাচক ফলাফলটি ফিরিয়ে দেবে।
18 সি

8

যদি আপনার লক্ষ্য বিকাশকারী সরঞ্জামগুলিকে জ্যাম করা হয়, তবে এটি ব্যবহার করে দেখুন (জেএস কোডটি এমন জায়গায় ছড়িয়ে দেওয়া হয়েছিল এমন জায়গায় আমি এর আরও জটিল সংস্করণ পেয়েছি) এটি অত্যন্ত বিরক্তিকর):

setTimeout(function() {while (true) {eval("debugger");}}, 0);

ব্যবহারকারী, ক্রোমে, ডিবাগারটি শুনতে অক্ষম করতে পারেন।
জ্যাক গিফিন

3

'ট্যাবস' অনুমতি সহ এক্সটেনশনের জন্য এটি পরীক্ষা করার একটি কৌশলপূর্ণ উপায় রয়েছে:

chrome.tabs.query({url:'chrome-devtools://*/*'}, function(tabs){
    if (tabs.length > 0){
        //devtools is open
    }
});

এটি আপনার পৃষ্ঠার জন্য উন্মুক্ত কিনা তা আপনিও পরীক্ষা করতে পারেন:

chrome.tabs.query({
    url: 'chrome-devtools://*/*',
    title: '*example.com/your/page*'
}, function(tabs){ ... })

3

আমি এই সম্পর্কে একটি ব্লগ পোস্ট লিখেছি: http://nepjua.org/check-if-browser-console-is-open/

এটি ডকড বা আনডকড কিনা তা সনাক্ত করতে পারে

function isConsoleOpen() {  
  var startTime = new Date();
  debugger;
  var endTime = new Date();

  return endTime - startTime > 100;
}

$(function() {
  $(window).resize(function() {
    if(isConsoleOpen()) {
        alert("You're one sneaky dude, aren't you ?")
    }
  });
});

3
এটি দুর্দান্ত, তবে, এটি পৃষ্ঠাটি বাসি করে দেবে এবং ব্যবহারকারী পুনরায় চালু বোতামটিতে ক্লিক না করা পর্যন্ত কোনও বার্তা প্রদর্শিত হবে না। এটি ব্যবহারকারীর জন্য অত্যন্ত অনুপ্রবেশকারী হবে।
গুয়া

2
পরবর্তী "রেস হ্যাজার্ড" সমাধান। খুব ভুল. BTW। "ডিবাগার" কমান্ড অক্ষম করা যেতে পারে।
18 সি

3
var div = document.createElement('div');
Object.defineProperty(div,'id',{get:function(){
    document.title = 'xxxxxx'
}});

setTimeout(()=>console.log(div),3000)

এটি কাজ করে না। এবং লিঙ্কটি test onlineকাজ করে না।
শমুয়েল

2

ক্রোম বিকাশকারী সরঞ্জামগুলি সত্যই ওয়েবকিটের ওয়েবকোরি লাইব্রেরির একটি অংশ। সুতরাং এই প্রশ্নটি সাফারি, ক্রোম এবং অন্য যে কোনও ওয়েবক্লোর গ্রাহকদের জন্য প্রযোজ্য।

যদি কোনও সমাধান বিদ্যমান থাকে, তখন ওয়েবকিট ওয়েব ইন্সপেক্টর খোলা থাকে এবং এটি বন্ধ হয়ে গেলে এটি ডিওএম-র একটি পার্থক্যের ভিত্তিতে তৈরি হবে। দুর্ভাগ্যক্রমে, এটি মুরগির এবং ডিমের এক ধরণের সমস্যা কারণ আমরা যখন ইন্সপেক্টরটি বন্ধ থাকে তখন আমরা DOM পর্যবেক্ষণ করতে ইন্সপেক্টরকে ব্যবহার করতে পারি না।

আপনি যা করতে সক্ষম হতে পারেন তা হ'ল পুরো ডিওএম ট্রি ডাম্প করার জন্য কিছুটা জাভাস্ক্রিপ্ট লিখুন। তারপরে ইন্সপেক্টর খোলা থাকলে একবার চালনা করুন এবং একবার ইন্সপেক্টর বন্ধ হয়ে গেলে। ডোমের কোনও পার্থক্য সম্ভবত ওয়েব পরিদর্শকের একটি পার্শ্ব-প্রতিক্রিয়া, এবং আমরা ব্যবহারকারী পরীক্ষা-নিরীক্ষা করছেন কিনা তা পরীক্ষার জন্য এটি ব্যবহার করতে সক্ষম হতে পারি।

এই লিঙ্কটি কোনও ডিওএম ডাম্পিং স্ক্রিপ্টের জন্য একটি ভাল সূচনা, তবে আপনি কেবলমাত্র DOMWindowনয়, পুরো অবজেক্টটি ডাম্প করতে চান document

হালনাগাদ:

দেখে মনে হচ্ছে এখন এটি করার কোনও উপায় আছে। ক্রোম ইন্সপেক্টর সনাক্তকারী পরীক্ষা করে দেখুন


ক্রোম ইন্সপেক্টর সনাক্তকারী আর বিকাশকারীদের দ্বারা উল্লিখিত গুগল ক্রোমের জন্য কাজ করে না
অ্যাঞ্জেলো

1

এছাড়াও আপনি এটি ব্যবহার করে দেখতে পারেন: https://github.com/sindresorhus/devtools-detect

// check if it's open
console.log('is DevTools open?', window.devtools.open);
// check it's orientation, null if not open
console.log('and DevTools orientation?', window.devtools.orientation);

// get notified when it's opened/closed or orientation changes
window.addEventListener('devtoolschange', function (e) {
    console.log('is DevTools open?', e.detail.open);
    console.log('and DevTools orientation?', e.detail.orientation);
});

1
ভাল কাজ করে না। কোনও ব্যবহারকারী যদি কোনও মোবাইল ডিভাইসে থাকে, তবে তারা তাদের ডিভাইসটি 90 ডিগ্রি ঘুরিয়ে দেয়, তারপরে স্ক্রিনটির আকার পরিবর্তন হবে।
জ্যাক গিফিন

Chrome- এ কাজ করে এবং FF অর্থাত না অথবা 4/5/2019 যেমন প্রান্ত
SolidSnake

1

মুহম্মদ উমরের দৃষ্টিভঙ্গি আমার পক্ষে কাজ করেছে, এবং আমি প্রতিক্রিয়া ব্যবহার করছি, তাই আমি সিদ্ধান্ত নিয়েছি একটি হুক সমাধান করা:

const useConsoleOpen = () => {
  const [consoleOpen, setConsoleOpen] = useState(true)

  useEffect(() => {
    var checkStatus;

    var element = new Image();
    Object.defineProperty(element, "id", {
      get: function () {
        checkStatus = true;
        throw new Error("Dev tools checker");
      },
    });

    requestAnimationFrame(function check() {
      checkStatus = false;
      console.dir(element); //Don't delete this line!
      setConsoleOpen(checkStatus)
      requestAnimationFrame(check);
    });
  }, []);

  return consoleOpen
}

দ্রষ্টব্য: আমি যখন এটির সাথে জগাখিচুড়ি করছিলাম তখন এটি দীর্ঘকাল ধরে কাজ করে নি এবং কেন এটি বুঝতে পারি না। আমি মুছে ফেলেছিলামconsole.dir(element); যা এটি কীভাবে কাজ করে তার জন্য গুরুত্বপূর্ণ। আমি বেশিরভাগ অ-বর্ণনামূলক কনসোল ক্রিয়াগুলি মুছে ফেলি কারণ তারা কেবল স্থান নেয় এবং সাধারণত ফাংশনটির জন্য প্রয়োজনীয় হয় না, তাই এটি আমার পক্ষে কাজ করে না।

এটি ব্যবহার করতে:

import React from 'react'

const App = () => {
  const consoleOpen = useConsoleOpen()

  return (
    <div className="App">
      <h1>{"Console is " + (consoleOpen ? "Open" : "Closed")}</h1>
    </div>
  );
}

আমি আশা করি এটি প্রতিক্রিয়া ব্যবহার করে যে কাউকে সহায়তা করবে। যদি কেউ এটিতে প্রসারিত করতে চায় তবে আমি চাই যে আমি এক পর্যায়ে অসীম লুপটি থামাতে সক্ষম হব (যেহেতু আমি এটি প্রতিটি উপাদানগুলিতে ব্যবহার করি না) এবং কনসোলটি পরিষ্কার রাখার উপায় খুঁজে বের করতে পারি।


0

আপনি যদি বিকাশকারী হন যারা উন্নয়নের সময় স্টাফ করছেন। এই ক্রোম এক্সটেনশনটি দেখুন। এটি আপনাকে যখন Chrome ডিভুটগুলি খুলবে বা বন্ধ হবে তা সনাক্ত করতে সহায়তা করে।

https://chrome.google.com/webstore/detail/devtools-status-detector/pmbbjdhohceladenbdjjoejcanjijoaa?authuser=1

এই এক্সটেনশনটি জাভাস্ক্রিপ্ট বিকাশকারীদের যখন Chrome পৃষ্ঠাগুলি বর্তমান পৃষ্ঠায় খোলা বা বন্ধ থাকে তা সনাক্ত করতে সহায়তা করে। যখন Chrome ডিভলটুলগুলি বন্ধ / খোলে, এক্সটেনশানটি উইন্ডো.ডকুমেন্ট এলিমেন্টে 'devtoolsStatusChanged' নামে একটি ইভেন্ট উত্থাপন করবে।

এটি উদাহরণ কোড:

 function addEventListener(el, eventName, handler) {
    if (el.addEventListener) {
        el.addEventListener(eventName, handler);
    } else {
        el.attachEvent('on' + eventName,
            function() {
                handler.call(el);
            });
    }
}


// Add an event listener.
addEventListener(document, 'devtoolsStatusChanged', function(e) {
    if (e.detail === 'OPENED') {
        // Your code when Devtools opens
    } else {
        // Your code when Devtools Closed
    }
});

0

এখানে কিছু উত্তর ক্রোম in working এ কাজ করা বন্ধ করবে Here এখানে একটি টাইমিং অ্যাটাক বিকল্প রয়েছে যা Chrome এ বেশ নির্ভরযোগ্যভাবে কাজ করে এবং toString()পদ্ধতির তুলনায় প্রশমিত করা আরও শক্ত hard দুর্ভাগ্যক্রমে এটি ফায়ারফক্সে নির্ভরযোগ্য নয়।

addEventListener("load", () => {

var baseline_measurements = [];
var measurements = 20;
var warmup_runs = 3;

const status = document.documentElement.appendChild(document.createTextNode("DevTools are closed"));
const junk = document.documentElement.insertBefore(document.createElement("div"), document.body);
junk.style.display = "none";
const junk_filler = new Array(1000).join("junk");
const fill_junk = () => {
  var i = 10000;
  while (i--) {
    junk.appendChild(document.createTextNode(junk_filler));
  }
};
const measure = () => {
    if (measurements) {
    const baseline_start = performance.now();
    fill_junk();
    baseline_measurements.push(performance.now() - baseline_start);
    junk.textContent = "";
    measurements--;
    setTimeout(measure, 0);
  } else {
    baseline_measurements = baseline_measurements.slice(warmup_runs); // exclude unoptimized runs
    const baseline = baseline_measurements.reduce((sum, el) => sum + el, 0) / baseline_measurements.length;

    setInterval(() => {
      const start = performance.now();
      fill_junk();
      const time = performance.now() - start;
      // in actual usage you would also check document.hasFocus()
      // as background tabs are throttled and get false positives
      status.data = "DevTools are " + (time > 1.77 * baseline ? "open" : "closed");
      junk.textContent = "";
    }, 1000);
  }
};

setTimeout(measure, 300);

});

0

হিসাবে ক্রোম / 77.0.3865.75 একটি সংস্করণ 2019 না কাজ করে। টসস্ট্রিং তাত্ক্ষণিক পরিদর্শক না খোলার অনুরোধ করে।

const resultEl = document.getElementById('result')
const detector = function () {}

detector.toString = function () {
	resultEl.innerText = 'Triggered'
}

console.log('%c', detector)
<div id="result">Not detected</div>

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