2017-01-06 4 views
0

Ich versuche, ein Cross-Browser-JavaScript zu erstellen, das erkennt, ob der Besucher den Inkognito-Modus verwendet oder nicht, und gibt eine Warnmeldung, wenn der Benutzer die Seite im normalen Modus besucht .Javascript für Cross-Browser-Erkennung von Inkognito-Modus (Private Browsing)

Zur Zeit habe ich ein Skript, das ganz gut auf Chrome und Opera funktioniert, aber ich muss es wie Firefox als auch auf allen anderen Browsern arbeiten, Safari, Rand usw.

Mein Skript (Arbeiten an Chrome und Opera) ist:

<script type='text/javascript'>//<![CDATA[ 
window.onload=function(){ 
function main() { 
    var fs = window.RequestFileSystem || window.webkitRequestFileSystem; 
    if (!fs) { 
    alert("check failed!"); 
    return; 
    } 
    fs(window.TEMPORARY, 100, function(fs) { 
    alert("You are not using Incognito Mode!"); 
    }); 
} 
main(); 

}//]]> </script> 

Bitte helfen Sie mir ein einziges Skript so schreiben die gleichen Alarm Ergebnisse in allen gängigen Web-Browsern zu geben.

Dank

UPDATE:

Ich habe endlich ein funktionierendes Skript als auch für Firefox. Der Code ist wie folgt: "("!) = -1 Firefox

<script type='text/javascript'> 
var db; 
var request = indexedDB.open("MyTestDatabase"); 
request.onsuccess = function(event) { 
if (navigator.userAgent.indexOf("Firefox") != -1) 
{ 
    alert("You are not using Incognito Mode!"); 
}; 
};</script> 

ich die navigator.userAgent.indexOf()" bei" Funktion verwendet habe, so dass es nur auf Firefox, und nicht in Chrom ausgeführt oder irgendein anderer Browser.

UPDATE:

Ok eine andere Leistung! Ich habe das Skript für Safari erfolgreich geschrieben. Hier ist sie:

<script type='text/javascript'> 
try { localStorage.test = 2; } catch (e) { 
} 
if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) 
{ 
if (localStorage.test = "true") { 
alert("You are not using Incognito Mode!"); 
} 
} 
</script> 

Auch ich verwendet habe, "wenn (navigator.userAgent.search (" Safari ")> = 0 & & navigator.userAgent.search (" Chrome ") < 0)" Funktion so dass es nur in Safari und nicht in jedem anderen Browser ausgeführt wird.

Jetzt brauche ich Hilfe beim Schreiben von Skript nur für Edge-Browser.

+0

Und nichts davon geholfen? https://www.google.com/search?q=javascript+detect+incognito+mode+firefox - bitte teilen Sie Ihre Bemühungen bei der Untersuchung dieser – mplungjan

+0

'nicht in der Lage, es für Firefox mit indexedDB zu tun. Und es gibt kein einziges Skript, das dies erreicht. –

+0

Funktioniert nicht auf Chrome 58 –

Antwort

0

Es ist diese Lösung, die ich here gefunden:

ich es knapp unter kopiert, falls es entfernt wird.

function retry(isDone, next) { 
    var current_trial = 0, max_retry = 50, interval = 10, is_timeout = false; 
    var id = window.setInterval(
     function() { 
      if (isDone()) { 
       window.clearInterval(id); 
       next(is_timeout); 
      } 
      if (current_trial++ > max_retry) { 
       window.clearInterval(id); 
       is_timeout = true; 
       next(is_timeout); 
      } 
     }, 
     10 
    ); 
} 

function isIE10OrLater(user_agent) { 
    var ua = user_agent.toLowerCase(); 
    if (ua.indexOf('msie') === 0 && ua.indexOf('trident') === 0) { 
     return false; 
    } 
    var match = /(?:msie|rv:)\s?([\d\.]+)/.exec(ua); 
    if (match && parseInt(match[1], 10) >= 10) { 
     return true; 
    } 
    return false; 
} 

function detectPrivateMode(callback) { 
    var is_private; 

    if (window.webkitRequestFileSystem) { 
     window.webkitRequestFileSystem(
      window.TEMPORARY, 1, 
      function() { 
       is_private = false; 
      }, 
      function(e) { 
       console.log(e); 
       is_private = true; 
      } 
     ); 
    } else if (window.indexedDB && /Firefox/.test(window.navigator.userAgent)) { 
     var db; 
     try { 
      db = window.indexedDB.open('test'); 
     } catch(e) { 
      is_private = true; 
     } 

     if (typeof is_private === 'undefined') { 
      retry(
       function isDone() { 
        return db.readyState === 'done' ? true : false; 
       }, 
       function next(is_timeout) { 
        if (!is_timeout) { 
         is_private = db.result ? false : true; 
        } 
       } 
      ); 
     } 
    } else if (isIE10OrLater(window.navigator.userAgent)) { 
     is_private = false; 
     try { 
      if (!window.indexedDB) { 
       is_private = true; 
      }     
     } catch (e) { 
      is_private = true; 
     } 
    } else if (window.localStorage && /Safari/.test(window.navigator.userAgent)) { 
     try { 
      window.localStorage.setItem('test', 1); 
     } catch(e) { 
      is_private = true; 
     } 

     if (typeof is_private === 'undefined') { 
      is_private = false; 
      window.localStorage.removeItem('test'); 
     } 
    } 

    retry(
     function isDone() { 
      return typeof is_private !== 'undefined' ? true : false; 
     }, 
     function next(is_timeout) { 
      callback(is_private); 
     } 
    ); 
} 
Verwandte Themen