-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathiframe.html
More file actions
120 lines (104 loc) · 4.41 KB
/
Copy pathiframe.html
File metadata and controls
120 lines (104 loc) · 4.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<html>
<body>
<div>
<span>Cookie enabled:</span>
<span id="cookie-status">False</span>
</div>
<div>
<span>Storage Access status:</span>
<span id="request-status">Not initiated</span>
</div>
<button id="allow-cookies" style="display: none">Allow cookies</button>
<script type="text/javascript">
window.localStorage.test = +(new Date());
let prevCookieEnabledInNavigator = null;
let prevCookieEnabledByTest = null;
function isCookieEnabled() {
let cookieEnabled = false;
try {
// Browser response
let cookieEnabledInNav = navigator.cookieEnabled;
// Logging
if (cookieEnabledInNav !== prevCookieEnabledInNavigator) {
prevCookieEnabledInNavigator = cookieEnabledInNav;
console.log('navigator.cookieEnabled', cookieEnabledInNav);
}
// Actual result
let cookieEnabledByTest;
const sampleCookie = 'cookietest=1';
document.cookie = sampleCookie;
cookieEnabledByTest = document.cookie.includes(sampleCookie);
document.cookie = `${sampleCookie}; expires=Thu, 01-Jan-1970 00:00:01 GMT`;
// Logging
if (cookieEnabledByTest !== prevCookieEnabledByTest) {
prevCookieEnabledByTest = cookieEnabledByTest;
console.log('cookieEnabledByTest', cookieEnabledByTest);
}
cookieEnabled = cookieEnabledByTest;
} catch (e) {
cookieEnabled = false;
}
// Set test cookie
if (cookieEnabled) {
document.cookie = `debug-storage-access-api=${+(new Date())}`;
}
return cookieEnabled;
}
function displayCookieStatusEnabled() {
document.querySelector('#cookie-status').innerHTML = 'True';
}
function displayRequestStatus(status) {
document.querySelector('#request-status').innerHTML = status;
}
function toggleRequestButtonDisplay(state) {
document.querySelector('#allow-cookies').style.display = state ? 'block' : 'none';
}
function pollCookieStatus() {
setTimeout(
() => {
if (isCookieEnabled()) {
displayCookieStatusEnabled();
} else {
pollCookieStatus();
}
},
1000
);
}
function initiateStorageAccessApiRequest() {
displayRequestStatus('Initiated request');
document.requestStorageAccess().then(
() => {
displayRequestStatus('Accepted');
window.localStorage.test = +(new Date());
toggleRequestButtonDisplay(false);
pollCookieStatus();
},
(...args) => {
displayRequestStatus('Rejected');
}
);
}
document.querySelector('#allow-cookies').addEventListener('click', initiateStorageAccessApiRequest);
if (isCookieEnabled()) {
document.querySelector('#cookie-status').innerHTML = 'True';
} else {
if (document.requestStorageAccess) {
document.hasStorageAccess().then(
hasAccess => {
console.log('hasStorageAccess', hasAccess);
!hasAccess && toggleRequestButtonDisplay(true);
},
reason => {
console.log('hasStorageAccess', reason);
toggleRequestButtonDisplay(true);
}
);
} else {
displayRequestStatus('Not available');
pollCookieStatus();
}
}
</script>
</body>
</html>