如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]

Posted

技术标签:

【中文标题】如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]【英文标题】:How to detect third-party cookies had being blocked without a page refresh; [?] 【发布时间】:2017-10-10 22:46:29 【问题描述】:

[?] 检测 第三方 cookie运行时被阻止; 无需刷新页面;

javascript; localStorage Cookie; Block third-party cookies and site data;

首先创建“项目”处于离线状态的动态自包含 html 文档;通过更改浏览器设置来检测第三方 cookie,cookie 会继续设置,直到页面已刷新;

示例代码:使用try to catch“访问”失败(阻塞);

if (typeof(Storage) !== "undefined") 
  try
    localStorage.setItem("document","test");
    localStorage.removeItem("document");
   catch(err) 
    alert("Cookies had failed to be set; Blocked!!");
  

示例代码:使用 navigator.cookieEnabled

if (!navigator.cookieEnabled) 
  //Sample Code here;
 else  //Sample Code Here; 


这种情况只检测到不刷新主 cookie 设置,而不是第三方数据;

【问题讨论】:

也许这里的答案会有所帮助***.com/questions/3550790/… 想知道个人在 Internet 上浏览其他内容,最终从其他文档中阻止 cookie;然后继续使用感兴趣的页面,因此表明设置已更改并且cookie数据将丢失;因为至少它在没有页面刷新的情况下继续动态工作; 要记住它不是正在制作的 Windows 软件程序 我在下面发布了一个不需要刷新页面的解决方案。 【参考方案1】:

检查localStorage 是否为null

if (localStorage === null) 
  alert("localStorage is disabled");

【讨论】:

不,发出的情况是一样的; localStorage === null 对它没有任何作用; Storage 是一个全局函数。 localStorage 可以在 Storage 仍被定义时被禁用。您是否尝试检查 localStorage 是否已禁用? 不……看那一定是浏览器的设计方式;它在运行时不会改变;至少在 Opera 和 Chrome 浏览器上;这里的重要性是要知道它在没有刷新页面的情况下被阻止;这可能是除了网页有漂亮的图形之外,它的构建逻辑非常低;好的,谢谢; @H3sDW11e 不确定您的意思。你想达到什么目的?【参考方案2】:

这里的解决方案是基于https://github.com/mindmup/3rdpartycookiecheck的解决方案

这涉及三个文件。客户端文件,我们称之为ThirdPartyCookies.html,以及不同服务器(第 3 方服务器)中的另外两个文件。我们称这两个文件为ThirdPartyCookies2.htmlThirdPartyCookies3.html。这是一个全 JavaScript 解决方案。您的第 3 方服务器可以是静态 CDN。

ThirdPartyCookies.html(客户端):此文件是客户端文件。无需刷新页面即可测试第三方 cookie。 使用您自己的第 3 方服务器或 CDN 的位置修改代码,其中显示代码中的 LOCATION OF THE FILE

<!DOCTYPE html>
<html>
<head>  
<style>
.testbutton 
  background-color: blue;
  color: yellow;
  text-align: center;
  border: 1px solid #000000;
  border-radius: 8px;
  min-width: 100px;
  max-width: 100px;
  cursor: pointer;


.testbutton:hover 
  background-color: darkgreen;
  color: yellow;


.small 
  font-family: "Verdana";
  font-size: x-small;

</style>
<script>
window.onload = function ()
    var receiveMessage = function (evt) 
      if (evt.data === 'MM:3PCunsupported') 
        alert("Cookies had failed to be set; Blocked!!");
       else if (evt.data === 'MM:3PCsupported') 
        // Third party cookies are supported
      
    ;
    window.addEventListener("message", receiveMessage, false);
;
function samplestorage()
    var iframe = document.getElementById('iframeCookies');
    iframe.src = iframe.src;

</script>
</head>
<body>
    <div class="small">
      go at Privacy &amp; Security, under browser settings, "Chrome,Opera"<br> then check\uncked [ ] Block third-party cookies and site data;
    </div>

    <br>

    <div class="testbutton" onclick="samplestorage();">
      Test Button
    </div>

    <br> page has to be refreshed if cookie settings are changed at browser settings;


  <iframe id="iframeCookies" src="LOCATION OF THE FILE/ThirdPartyCookies2.html" style="display:none" />
</body>
</html>

ThirdPartyCookies2.html(在您的第 3 方服务器中):

<!DOCTYPE html>
<html>
<head></head>
<body>
<script>
    document.cookie="thirdparty=yes";
    document.location="ThirdPartyCookies3.html";
</script>
</body>
</html>

ThirdPartyCookies3.html(在您的第 3 方服务器中):

<!DOCTYPE html>
<html>
<head></head>
<body>
<script>
 if (window.parent) 
    if (/thirdparty=yes/.test(document.cookie)) 
        window.parent.postMessage('MM:3PCsupported', '*');
     else 
        window.parent.postMessage('MM:3PCunsupported', '*');
    
 
</script>
</body>
</html>

如果您想查看其他解决方案,请查看此 SO 问题 Check if third-party cookies are enabled

【讨论】:

【参考方案3】:

检测 3rd 方 cookie 状态可能有点麻烦。 我遇到了这个问题,在网上发现没有任何帮助,所以我自己写了一个解决方案,在这里

我想出并且始终有效的方法是添加一个我们现在将构建的外部 iFrame,它将检测 iFrame 是否可以访问 cookie 并将通知父应用程序有关 cookie 的状态。听起来很奇怪,实际上我们无法通过 iFrame 或反之亦然调用父函数,但是我们有一个超级大国⚡

完整的文章和一个例子

https://medium.com/devscollab/detecting-whether-3rd-party-cookies-are-enabled-or-not-in-javascript-4328715a527b

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何在不刷新页面的情况下检测第三方 cookie 被阻止; [?]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新页面的情况下使用 JS SDK 检测从 fb 注销

在不刷新页面的情况下检测元掩码安装

Django:如何在不刷新页面的情况下更新图像?

如何在不刷新整个页面的情况下重新加载组件?

如何在不重新加载整个页面的情况下刷新 div?

如何使用 Django、Ajax、jQuery 在不刷新页面的情况下提交表单?