在 2015 年有一个适当的解决方法。假设有一个网站 y.com,其中包括 iframe 和网站 x.com。x.com iframe 想要存储一个 cookie。Safari 政策不允许这样做,但是 y.com 可以存储它。所以 y.com 必须监听来自 x.com 的消息,然后存储 cookie 本身。
var _cookieEvMth = window.addEventListener ? "addEventListener" : "attachEvent";
var _cookieEvAction = window[_cookieEvMth];
var _cookieEv = _cookieEvMth == "attachEvent" ? "onmessage" : "message";
_cookieEvAction(_cookieEv, function(evt){
if(evt.data.indexOf('cookieset')!=-1){
var datack = evt.data.split('|');
YOUR_CUSTOM_COOKIE_SAVE_METHOD(datack[1],datack[2],datack[3]);
}
},false);
当 x.com 需要存储 cookie 时,它必须向 y.com 发布消息:
window.parent.postMessage('cookieset|'+ckName+'|'+ckVal+'|'+days,'*');
如果您想阅读 cookie,您也可以按照自己的方式将消息发布到 iframe。或者您可以使用 javascript 将其作为参数包含在 x.com iframe url 中:
iframe.setAttribute('url','x.com/?cookieval='+YOUR_COOKIE_GET_METHOD('cookiename'));