क्या आप यह निर्धारित कर सकते हैं कि क्रोम स्क्रिप्ट के माध्यम से गुप्त मोड में है?


114

यदि Google Chrome स्क्रिप्ट के माध्यम से गुप्त मोड में है, तो क्या यह निर्धारित करना संभव है?

संपादित करें: मेरा वास्तव में मतलब है कि यह उपयोगकर्ता-स्क्रिप्ट के माध्यम से संभव है, लेकिन उत्तर मानते हैं कि जावास्क्रिप्ट एक वेब पेज पर चल रहा है। मैंने उपयोगकर्ता स्क्रिप्ट के संबंध में यहां प्रश्न फिर से पूछा है ।


28
यह बहुत आसान नहीं होगा incognitoयदि आप इसे आसानी से निर्धारित कर सकते हैं :)
Aren

और आपको यह याद रखना होगा कि उपयोगकर्ता को एक्सटेंशन मैनुअल के लिए गुप्त मोड की अनुमति देनी चाहिए। डिफ़ॉल्ट रूप से, सब कुछ सच है।
मोहम्मद मंसूर

@Mohamed: इतना है कि एक समस्या :) नहीं किया जाएगा उपयोगकर्ता, यह मेरे होगा अनुमति देने के लिए हो रही
RodeoClown


1
@PeteAlvin या साइट गुप्त का पता लगाकर मूल्य घटा सकती है। बोस्टन ग्लोब की साइट अपने लेखों को गुप्त में प्रदर्शित नहीं करेगी, जिससे उपयोगकर्ता को उनके मुफ्त लेख कोटा को दरकिनार करने से रोका जा सके। सामान्य तौर पर, मुझे पसंद है कि कोई साइट मेरे बारे में कम जानती हो।
जॉन सी।

जवाबों:


232

हाँ। फ़ाइलसिस्टम API गुप्त मोड में अक्षम है। की जाँच करें https://jsfiddle.net/w49x9f1a/ जब आप कर रहे हैं और गुप्त मोड में नहीं हैं।

नमूना कोड:

    var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
    if (!fs) {
      console.log("check failed?");
    } else {
      fs(window.TEMPORARY,
         100,
         console.log.bind(console, "not in incognito mode"),
         console.log.bind(console, "incognito mode"));
    }


19
यह सबसे कम हैक-ईश तरीका है और सबसे ऊपर होना चाहिए। साफ और सुंदर।
टॉम तेमन

1
@ user2718671 jsfiddle.net/w49x9f1a अभी भी मैक ओएसएक्स पर नवीनतम क्रोम में मेरे लिए ठीक काम करता है। अजीब ...
आलोक

1
मैंने क्रोम पर कोशिश की। यह काम करता है, लेकिन तर्क पीछे है।
लुकास मासुह

9
यह जल्द ही इन कमिट्स की
बदौलत

8
क्रोम v 77.0.3865.90 में विफल
गीतेश पूर्बिया

18

एक तरीका यह है कि एक अद्वितीय URL पर जाएँ और फिर यह देखने के लिए जाँचें कि क्या उस URL का लिंक CSS द्वारा देखा गया है।

आप इसका एक उदाहरण "डिटेक्टिंग इनकॉग्निटो" (डेड लिंक) में देख सकते हैं ।

एक ही लेखक द्वारा शोध पत्र का पता लगाने के लिए ऊपर दिए गए गुप्त लिंक को बदलना

में main.htmlएक iframe जोड़ने के लिए,

 <iframe id='testFrame' name='testFrame' onload='setUniqueSource(this)' src='' style="width:0; height:0; visibility:hidden;"></iframe>

, और कुछ जावास्क्रिप्ट कोड:

function checkResult() {
  var a = frames[0].document.getElementById('test');
  if (!a) return;

  var color;
  if (a.currentStyle) {
    color = a.currentStyle.color;
  } else {
    color = frames[0].getComputedStyle(a, '').color;
  }

  var visited = (color == 'rgb(51, 102, 160)' || color == '#3366a0');
  alert('mode is ' + (visited ? 'NOT Private' : 'Private'));
}

function setUniqueSource(frame) {
  frame.src = "test.html?" + Math.random();
  frame.onload = '';
}

उसके बाद test.htmliFrame में लोड किया जाता है:

<style> 
   a:link { color: #336699; }
   a:visited { color: #3366A0; }
</style> 
<script> 
  setTimeout(function() {
    var a = document.createElement('a');
    a.href = location;
    a.id = 'test';
    document.body.appendChild(a);
    parent.checkResult();
  }, 100);
</script> 

ध्यान दें: फ़ाइल सिस्टम से यह कोशिश करना क्रोम को "असुरक्षित जावास्क्रिप्ट" के बारे में बता सकता है। हालांकि, यह एक वेबसर्वर से काम करेगा।


यह बहुत अच्छा है, मुझे नहीं पता था कि गुप्त मोड ने विज़िट किए गए लिंक को उजागर नहीं किया है। इसके लिए उपयोगकर्ता को एक लिंक पर क्लिक करना होगा।
इगोर ज़ेवाका

1
नहीं, यह नहीं है, iframe लिंक पर "क्लिक" करता है।
किबिबू

40
यह वास्तव में काम नहीं करता है क्योंकि अधिकांश ब्राउज़र उजागर नहीं करते हैं: जावास्क्रिप्ट के माध्यम से शैली की जानकारी का दौरा किया। सीएसएस इंटरफ़ेस कहेंगे जैसे कि लिंक में गैर-विज़िट किया गया रंग है। यह एक सुरक्षा उपाय है जो कम से कम 2010 के बाद से WebKit- और Gecko ब्राउज़रों में रहा है। यह उपयोगकर्ता के इतिहास की रक्षा करने के लिए था (जैसे कोई सभी संभव URL आज़मा सकता है, और विज़िट किए गए लोगों को किसी तीसरे पक्ष को भेज सकता है। इस तरह से कोई भी प्राप्त कर सकता है। उरल्स में टोकन का उपयोग और क्या नहीं)।
टिमो तिजहोफ़

2
आधिकारिक मोज़िला लेख गोपनीयता संबंधी परिवर्तनों की व्याख्या करता है :visited: hacks.mozilla.org/2010/03/…
Denilson Sá Maia

18

Chrome 74+ में आप उपलब्ध फ़ाइल सिस्टम स्टोरेज स्पेस का अनुमान लगाकर इसे निर्धारित कर सकते हैं

Jsfiddle देखें

if ('storage' in navigator && 'estimate' in navigator.storage) {
    const {usage, quota} = await navigator.storage.estimate();
    console.log(`Using ${usage} out of ${quota} bytes.`);

    if(quota < 120000000){
        console.log('Incognito')
    } else {
        console.log('Not Incognito')
    }   
} else {
    console.log('Can not detect')
}

4
यह अब सही उत्तर है। या तो स्वीकृत उत्तर को इसके साथ अद्यतन किया जाना चाहिए, या स्वीकृत उत्तर को बदलना चाहिए। मूल रूप से स्वीकार किए गए उत्तर से दूर नहीं ले जाना क्योंकि यह उस समय सही समाधान था।
क्रंचर

8

आप जावास्क्रिप्ट में, जुर्राह का जवाब देख सकते हैं । लिंक हाइलाइट नहीं करने के अलावा, सभी गुप्त मोड ब्राउज़ इतिहास और कुकीज़ को नहीं बचाते हैं। Google सहायता पृष्ठ से :

  • वेबपेज जो आप खोलते हैं और आपके द्वारा गुप्त रहते समय डाउनलोड की गई फ़ाइलें आपके ब्राउज़िंग और डाउनलोड इतिहास में रिकॉर्ड नहीं की जाती हैं।
  • आपके द्वारा खोले गए सभी गुप्त विंडो बंद करने के बाद सभी नए कुकीज़ हटा दिए गए हैं।

जैसा कि आप वेब पेज पर जाने के बाद सामान्य ब्राउज़िंग और गुप्त के बीच के अंतर को देख सकते हैं , इसलिए ऐसा कुछ भी नहीं है जो ब्राउज़र इस मोड में होने पर सर्वर से संचार करता है।

आप यह देख सकते हैं कि वास्तव में आपका ब्राउज़र कई HTTP रिक्वेस्ट एनालाइज़र में से किसी एक का उपयोग करके सर्वर को क्या भेजता है, जैसे यह यहाँ है । सामान्य सत्र और गुप्त के बीच हेडर की तुलना करें और आप कोई अंतर नहीं देखेंगे।


हाल ही में, यह उन एक्सटेंशनों को छोड़कर सभी एक्सटेंशन को निष्क्रिय कर देता है जो विशेष रूप से उपयोगकर्ता द्वारा गुप्त रूप से सुरक्षित के रूप में चिह्नित किए गए थे।
तिबरियू-आयनू स्टेन

4

यदि आप एक एक्सटेंशन विकसित कर रहे हैं, तो आप टैब एपीआई का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि कोई विंडो / टैब गुप्त है।

अधिक जानकारी यहां पाई जा सकती है

यदि आप केवल एक वेबपेज के साथ काम कर रहे हैं, तो यह आसान नहीं है, और इसे इस तरह से बनाया गया है। हालाँकि, मैंने देखा है कि incongnito में डेटाबेस (window.database) को खोलने के सभी प्रयास विफल हो जाते हैं, ऐसा इसलिए है क्योंकि जब गुप्त में डेटा का कोई निशान उपयोगकर्ता मशीन पर नहीं छोड़ा जाता है।

मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे संदेह है कि लोकलस्टोरेज के सभी कॉल विफल हैं।


3

यह ध्वज को सेट करने के लिए अतुल्यकालिक कोड के लिए प्रतीक्षा करने के लिए एक वादे का उपयोग करता है, इसलिए हम इसे बाद में तुल्यकालिक रूप से उपयोग कर सकते हैं।

let isIncognito = await new Promise((resolve, reject)=>{
    var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
    if (!fs) reject('Check incognito failed');
    else fs(window.TEMPORARY, 100, ()=>resolve(false), ()=>resolve(true));      
});

तो हम कर सकते हैं

if(isIncognito) alert('in incognito');
else alert('not in incognito');

यह दिखता है बहुत ही दिलचस्प और जावास्क्रिप्ट का एक रूप है कि मैं के साथ अपरिचित हूँ और Windows 10 में मेरी Netbeans 8.2 आईडीई द्वारा असमर्थित लगता है लेकिन अगर मैं यह काम करने के लिए प्राप्त कर सकते हैं, मैं भी उत्सुक हूँ है: मैं बदल सकते reject('Check incognito failed')के साथ resolve(false)करता है, तो मैं चाहता हूँ isIncognitoएक बूलियन बनने के लिए जो केवल सच या गलत है? धन्यवाद।
रयान

2
मैं देखता हूं Syntax Error: await is a reserved word, और मुझे लगता है कि awaitहमेशा एक asyncफ़ंक्शन के भीतर रहने की आवश्यकता है । इसलिए मुझे लगता है कि यह कोड काम नहीं करता है।
रयान

1
reject अगर इसे बुलाया जाता है, तो एक अपवाद को उठाया जाएगा, और एक मूल्य वापस नहीं किया जाएगा, इसलिए isIncognito हमेशा होगा trueया falseजिस तरह से कोड लिखा गया है। हालाँकि, यदि आप कोई मान लौटाते हैं, तो आप वहां एक 'रिज़ॉल्यूशन' का भी उपयोग कर सकेंगे। और यह इस बात पर निर्भर हो सकता है कि वैश्विक दायरे में पर्यावरण का इंतजार कैसे हो? यह वैश्विक दायरे में क्रोम कंसोल पर काम करता है, लेकिन आप सब कुछ लपेटने की कोशिश कर सकते हैं (async function() { 'everything here' })();ताकि यह एक async फ़ंक्शन के अंदर चला जाए
aljgom

2
वैकल्पिक रूप से, आप isIncognitoपरिणाम के बजाय वादे को बचा सकते हैं , और इसे बाद में एक async फ़ंक्शन में चला सकते हैं: let isIncognito = new Promise( ...etcतब कहीं और आपके पास एक फ़ंक्शन होगा जैसे(async function() { if( !(await isIncognito) ) {alert('not incognito') } })();
aljgom

1
यह उत्तर क्रोम 76+
क्रंचर

0

आलोक के उत्तर पर आधारित त्वरित प्रति-पेस्ट समारोह (नोट: यह अतुल्यकालिक है)

function ifIncognito(incog,func){
    var fs = window.RequestFileSystem || window.webkitRequestFileSystem;
    if (!fs)  console.log("checking incognito failed");
    else {
        if(incog) fs(window.TEMPORARY, 100, ()=>{}, func);
        else      fs(window.TEMPORARY, 100, func, ()=>{});
    }
} 

उपयोग:

ifIncognito(true,  ()=>{ alert('in incognito') });
// or
ifIncognito(false, ()=>{ alert('not in incognito') });

यह अब काम नहीं कर रहा है (शायद यह अतीत में काम करता था)
एलेक्जेंड्रू आर

2
अभी मेरे क्रोम को अपडेट किया है और यह अभी भी काम करता है। मैं आपको ऊपर वही पोस्ट करता देख रहा हूं और फिर कहा गया कि आपसे गलती हुई है, बस इसे भविष्य के दर्शकों के लिए इंगित करें (अपनी टिप्पणी को हटाने के लिए स्वतंत्र महसूस करें, यदि आप ऐसा करते हैं तो मैं इसे हटा दूंगा)।
अलजगोम

0

यहाँ ES6 सिंटेक्स में लिखा गया सुझाव दिया गया उत्तर है और थोड़ा क्लीयर है।

const isIncognito = () => new Promise((resolve, reject) => {
    const fs = window.RequestFileSystem || window.webkitRequestFileSystem;

    if (!fs) {
        reject('Cant determine whether browser is running in incognito mode!');
    }

    fs(window.TEMPORARY, 100, resolve.bind(null, false), resolve.bind(null, true));
});

// Usage
isIncognito()
    .then(console.log)
    .catch(console.error)

0

यहां वादों का उपयोग कर समाधान

const isIncognito = () => {
    return new Promise((resolve, reject) => {
      if ("storage" in navigator && "estimate" in navigator.storage) {
        navigator.storage.estimate().then((res) => {
          console.log(`Using ${res.usage} out of ${res.quota} bytes.`);
          if (res.quota < 120000000) {
            resolve(true);
          } else {
            reject(false);
          }
        });
      } else {
        reject(false);
      }
    });
  };

इसका उपयोग कैसे करें:

isIncognito().then(yes => console.log(yes)).catch(isnot => console.log(isnot))

-10

गुप्त मोड के लिए प्रलेखन विशेष रूप से कहता है कि वेबसाइट अलग तरह से व्यवहार नहीं करेगी। मेरा मानना ​​है कि इसका मतलब यह है कि उत्तर नहीं है।


9
मुझे पता है कि यह उत्तर 4 साल पुराना है, लेकिन हाल ही में नेटफ्लिक्स ने "गुप्त" पता लगाया है, और इसने मेरी रुचि को शोध के लिए लागू किया है कि वे इसे कैसे खींचते हैं। यदि आप गुप्त पर नेटफ्लिक्स पर जाते हैं, तो नेटफ्लिक्स आपको वीडियो चलाने की अनुमति नहीं देता है।
ILikeTacos

सत्यापित <क्रोम>: "गुप्त मोड त्रुटि आपका ब्राउज़र गुप्त मोड में प्रतीत होता है।"
पीट एल्विन

मुझे लगता है कि इस पोस्ट में सुधार किया जा सकता है क्योंकि यह निश्चित रूप से तथ्यों पर बात नहीं करता है। जैसा कि यह पहले ही साबित हो चुका है कि इस उत्तर से दोनों को यह देखा जा सकता है कि क्या कोई यह देखना चाहेगा कि वे गुप्त मोड से आए हैं या नियमित क्रोम ब्राउज़र से।
फॉर्च्यूनसोलर

@ILikeTacos मुझे पता है कि आपकी टिप्पणी (चार साल से अधिक) पुरानी है, लेकिन क्रोम ने जानबूझकर उनकी गुप्त पहचान को तोड़ दिया है, इसलिए मुझे अब भी लगता है कि मैं उस एक पर जीता हूं ..
Puppy

@ अच्छी तरह से हाँ। लेकिन वास्तव में कोई mishravikas.com/articles/2019-07/…
Cruncher
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.