web-dev-qa-db-ja.com

Microsoft Edge:ローカル/セッションストレージが新しいタブで機能していません

AzureでホストされているWebアプリケーションに取り組んでいます。 MS Edge(ビルド20.10525.0.0)で試してみたところ、次の問題が発生しました。

新しいタブでページを開くためのtarget_blankへのリンクがあります。このリンクのクリックイベントで、セッションストレージにデータを保存します。新しいページは、データを取得して表示しています。これは、Chrome、Firefox、IE 9-10-11で正常に機能します。

Edgeの下では、ストレージは正常に機能しているようです。とはいえ、取得は常に機能しているわけではありません。時々、最初の試みがうまくいく。 nullを返す場合があります。

セッションストレージの代わりにローカルストレージを使用しようとしました。また、ターゲットの_blankの代わりにwindow.openを使用しようとしました。これらのソリューションは両方とも機能していません。

誰かアイデアがありますか?

22
Annie Vincent

複数のタブにまたがるlocalStorageで同じ問題が発生しました。断続的にしか機能しないか、まったく機能しませんでした。私の解決策は、IE10、IE11、およびMS Edge(Edge v20.10240でテスト済み)で正常に機能するwindow.indexedDBMDNに関するドキュメント を参照)に切り替えることでした。

3
beluga

ウィンドウ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を参照します

0
Tien Dinh