AzureでホストされているWebアプリケーションに取り組んでいます。 MS Edge(ビルド20.10525.0.0)で試してみたところ、次の問題が発生しました。
新しいタブでページを開くためのtarget_blankへのリンクがあります。このリンクのクリックイベントで、セッションストレージにデータを保存します。新しいページは、データを取得して表示しています。これは、Chrome、Firefox、IE 9-10-11で正常に機能します。
Edgeの下では、ストレージは正常に機能しているようです。とはいえ、取得は常に機能しているわけではありません。時々、最初の試みがうまくいく。 nullを返す場合があります。
セッションストレージの代わりにローカルストレージを使用しようとしました。また、ターゲットの_blankの代わりにwindow.openを使用しようとしました。これらのソリューションは両方とも機能していません。
誰かアイデアがありますか?
複数のタブにまたがるlocalStorageで同じ問題が発生しました。断続的にしか機能しないか、まったく機能しませんでした。私の解決策は、IE10、IE11、およびMS Edge(Edge v20.10240でテスト済み)で正常に機能するwindow.indexedDB
( MDNに関するドキュメント を参照)に切り替えることでした。
ウィンドウAがウィンドウBを作成した場合、ストレージイベントがトリガーされます
このコードで試してみてください
a.htmというファイルを作成し、このスクリプトをに追加します。
(function() {
function write(s) {
var d = document.createElement('div');
d.innerHTML = s;
document.body.appendChild(d);
}
var w = window.open('','window_b');
if (w.location.Host === '') {
w.location.href = 'http://localhost/b.htm';
}
if (window.localStorage) {
setInterval(function() {
var now = (new Date()).toTimeString();
localStorage.removeItem('date');
localStorage.setItem('date', now);
write('fired on ' + now);
}, 3000);
}
else {
write('local storage not detected!');
}
})();
b.htmというファイルを作成し、このスクリプトを追加します
(function() {
function write(s) {
var d = document.createElement('div');
d.innerHTML = s;
document.body.appendChild(d);
}
window.addEventListener('storage', function(e) {
e.newValue && write('received ' + e.newValue);
});
})();
次に、a.htmを参照します