菜鸟教程小白 发表于 2022-12-13 03:53:44

ios - 如何在 iOS 11+ Safari 以及旧版本的 Safari 中检测隐私浏览?


                                            <p><p>我需要检测用户是否在旧版本的 Safari 和 IOS 11 上的 Safari 中处于私有(private)模式。是否有涵盖两者的测试?</p>

<p>更新:这是一个尝试结合 storage 和 openDatabase try-catchblock 的笔,基于下面 jeprubio 的解决方案</p>

<pre><code>var isPrivate = false;

// Check private in iOS &lt; 11
var storage = window.sessionStorage;
try {
console.log(&#39;first try for storage&#39;)
    storage.setItem(&#34;someKeyHere&#34;, &#34;test&#34;);
    storage.removeItem(&#34;someKeyHere&#34;);
} catch (e) {
console.log(&#39;first catch&#39;)
    if (e.code === DOMException.QUOTA_EXCEEDED_ERR &amp;&amp; storage.length === 0) {
      isPrivate = true;
   }
}

// Check private in iOS 11: https://gist.github.com/cou929/7973956#gistcomment-2272103
try {
console.log(&#39;second try for opendb&#39;);
   window.openDatabase(null, null, null, null);
} catch (e) {
console.log(&#39;second catch&#39;);
   isPrivate = true;
}

console.log(&#39;isPrivate: &#39; + isPrivate)

alert((isPrivate ? &#39;You are&#39; : &#39;You are not&#39;)+ &#39; in private browsing mode&#39;);
</code></pre>

<p> <a href="https://codepen.io/anon/pen/zpMZjp" rel="noreferrer noopener nofollow">https://codepen.io/anon/pen/zpMZjp</a> </p>

<p>在 Safari 新版本 (11+) 普通浏览器模式下,控制台上的 openDatabase 测试不会出错,但进入第二个 catch 并且 isPrivate 设置为 true。因此,在 Safari 11+ 中,非隐私模式也被检测为隐私模式。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>试试这个:</p>

<pre><code>var isPrivate = false;

// Check private in iOS &lt; 11
var storage = window.sessionStorage;
try {
    storage.setItem(&#34;someKeyHere&#34;, &#34;test&#34;);
    storage.removeItem(&#34;someKeyHere&#34;);
} catch (e) {
    if (e.code === DOMException.QUOTA_EXCEEDED_ERR &amp;&amp; storage.length === 0) {
      isPrivate = true;
   }
}

// Check private in iOS 11: https://gist.github.com/cou929/7973956#gistcomment-2272103
try {
   window.openDatabase(null, null, null, null);
} catch (_) {
   isPrivate = true;
}

alert((isPrivate ? &#39;You\&#39;re&#39; : &#39;You aren\&#39;t&#39;)+ &#39; in private browsing mode&#39;);
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在 iOS 11&#43; Safari 以及旧版本的 Safari 中检测隐私浏览?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/48169810/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/48169810/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在 iOS 11&#43; Safari 以及旧版本的 Safari 中检测隐私浏览?