如何在不刷新页面的情况下检测第三方 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.html
和ThirdPartyCookies3.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 & 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 被阻止; [?]的主要内容,如果未能解决你的问题,请参考以下文章