【问题标题】:Javascript For Cross Browser Detection of Incognito Mode (Private Browsing)Javascript 用于跨浏览器检测隐身模式(隐私浏览)
【发布时间】:2017-05-20 21:03:54
【问题描述】:

我正在尝试创建一个跨浏览器 javascript 来检测访问者是否使用隐身模式,并在用户以正常模式访问页面时发出警报消息。

目前我有一个脚本,它在 Chrome 和 Opera 上运行良好,但我需要让它在所有其他浏览器以及 firefox、safari、Edge 等浏览器上运行。

我的脚本(在 Chrome 和 Opera 上工作)是:

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

请帮助我编写一个这样的脚本,以便在所有主要网络浏览器中提供相同的警报结果。

谢谢

更新:

我终于也为 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>

我使用了“if (navigator.userAgent.indexOf("Firefox") != -1)”函数,使其仅在 Firefox 上执行,而不是在 chrome 或任何其他浏览器中执行。

更新:

好的,又一个成就!我也成功地为 Safari 编写了脚本。这里是:

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

再次,我使用了“if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome")

现在我需要帮助来编写仅适用于 Edge 浏览器的脚本。

【问题讨论】:

  • '无法使用 indexedDB 为 firefox 执行此操作。并且没有一个单一的脚本可以实现这一点。
  • 不适用于 Chrome 58
  • @SidneydeMoraes 它在 Chrome 63 上为我工作
  • @cody 感谢您的回复,但我的评论已有 6 个月了。你可以无视它。

标签: javascript google-chrome firefox safari microsoft-edge


【解决方案1】:

我找到了这个解决方案here:

我只是在下面复制它以防它被删除。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 2015-05-16
    • 2013-09-22
    • 2014-11-20
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多