Javascript Cookies在Safari中不起作用
Javascript Cookies not working in Safari
我一直在尝试用Javascript实现一个基本的cookie存储功能,它在大多数浏览器中都能正常工作,但在Safari(8.0.3)中却不能。我将其简化为下面的例子,每个其他浏览器都会将文本更改为cookie中存储的日期,但Safari根本不存储cookie,并给出一个空字符串(控制台中也没有错误消息)。Safari设置为接受所有cookie。
如果我在W3Schools.com的测试台上输入代码,它在每个浏览器中都能工作,那么它在某种程度上与域有关吗?(在JSFiddle中,它似乎根本不起作用,控制台抱怨没有定义myFunction。)
我只发现了两个相同类型的旧问题,但在一种情况下,解决方案是添加";path=/"部分,它已经在这里了,而在另一种情况中,用逗号代替了分号。
<!DOCTYPE html>
<html>
<body>
<p id="doesitwork" onclick="myFunction()">Does it work?</p>
<script>
function myFunction() {
d = new Date();
document.cookie = (d + "; expires=" + "May 31 2016 23:59:59 GMT+09:00" + "; path=/");
var x = document.cookie;
document.getElementById("doesitwork").innerHTML = x;
}
</script>
</body>
</html>
默认情况下,iOS safari浏览器不允许使用cookie。我们必须从safari浏览器启用cookie设置
因此,我们实现了本地存储(javascript概念)来克服safari浏览器中的cookie问题。
你可以看看这篇漂亮的文章,它们向你展示了一个创建、读取和删除cookie的函数,它还显示了纯JS和jQuery。博客上的代码如下所示:
// Create cookie
function createCookie(name, value, days) {
var expires;
if (days) {
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires = "; expires="+date.toGMTString();
}
else {
expires = "";
}
document.cookie = name+"="+value+expires+"; path=/";
}
// Read cookie
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0) === ' ') {
c = c.substring(1,c.length);
}
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length,c.length);
}
}
return null;
}
// Erase cookie
function eraseCookie(name) {
createCookie(name,"",-1);
}
创建这样的cookie:
createCookie("cookie-name", "cookie-value", 30);
阅读cookie如下:
readCookie("cookie-name");
// Usually you set it as a variable and then use it somewhere
var colorTheme = readCookie("color-theme");
// Then do some conditional crap with it
if (colorTheme == "Blue") {
// Add a class to the body or elswere
} else {
// Add a different class maybe...
}
您没有设置名称-值对
document.cookie = (d + "; expires=" + "May 31 2016 23:59:59 GMT+09:00" + "; path=/");
应该是类似的东西
document.cookie = "time=" + d + "; expires=" + "May 31 2016 23:59:59 GMT+09:00" + "; path=/";
相关文章:
- window.open(url).print()在Safari中不起作用
- 复制到剪贴板在safari-angularjs中不起作用
- Javascript Cookies在Safari中不起作用
- 带有Safari的Javascript;不起作用——所有其他浏览器都起作用
- 导航到新url时,Javascript在Safari中不起作用
- JS代码使IE9和Safari冻结,在Opera中不起作用
- html视频javascript播放方法在移动Safari中不起作用
- 为什么这个排序功能在 Safari 中不起作用
- $.getJSON 在 Chrome 和 Safari 中不起作用
- window.dispatchEvent 在 Firefox、Safari 或 IE 中不起作用
- 滚动到顶部按钮在 chrome 或 safari 中不起作用
- jQuery .play() 在移动 Safari 上不起作用
- jQuery .focus() 在 Safari(桌面)的搜索字段中不起作用
- HTML5<视频>元素在Firefox、Opera和Safari中不起作用
- 为什么find('input:focus')在safari中不起作用
- OfflineAudioContext.startRendering()基于承诺的函数在safari中不起作用
- ng模式验证在safari中不起作用
- 图像预览在Safari中不起作用
- 脚本在safari中不起作用
- webcomponents.js polyfills 不起作用:Safari 和 Firefox