生产中的工作示例
我这样做的方法是使用一个 iframe 对其父级执行 postMessage。iframe 始终在 https 上,但父级可以是 http 或 https。此解决方案假定修改仅在 SSL 上存储到存储并将其同步回非 SSL,但您可以调整它以双向发送修改,以便非 ssl 父级将更改向下发送到 ssl 子级。
ssl iframe 源 (storage-sync.html):
if (sessionStorage.cart)
try {
var obj = { cart: JSON.parse(sessionStorage.cart) };
parent.postMessage(JSON.stringify(obj), 'http://yourdomain.com');
} catch(ex) {
console.log(ex);
}
ssl/非 ssl 父源:
window.addEventListener('message', function(ev) {
if (ev.origin !== 'https://yourdomain.com')
return;
try {
var obj = JSON.parse(ev.data);
sessionStorage.cart = JSON.stringify(obj.cart);
cart.reload();
} catch(ex) {};
});
$('body').append('<iframe style="display:none" src="https://yourdomain.com/storage-sync.html?r=' + Math.random() + '"></iframe>');
将目标来源放置到正确的协议可确保您不会将消息发送到错误的协议。