本番稼働例
私がこれを行った方法は、親に postMessage を行う iframe を使用することでした。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>');
ターゲットのオリジンを正しいプロトコルに配置することで、間違ったプロトコルにメッセージを送信することがなくなります。