2017-06-21 6 views
1

作成したページだけが使用できるブラウザストレージはありますか?ブラウザタブの保存?

私は仕事を自動化するTamperMonkeyスクリプトを作成しています。特定のドメインのページが開かれたときにトリガーされます。そのページで特定のリンク(同じドメイン)を見つけて、同じタブで開くことができます。新しく開いたページが条件に合致する場合は、前のページに戻ります(手動でチェックされます)。そうでなければ、それはそれ自身を閉じます。

私は、ページがこのチェックをしようとしたときにマークするためにlocalStorageを使用しました。それ以外の場合は、元のページがロードされてループに巻き込まれたときにスクリプトがリンクを再オープンします。

単一のタブだけが実行されている場合、スクリプトは円滑に実行されます。しかし、複数のタブ(すべて同じドメイン内)を実行すると、多くの場合失敗します。私は、各タブが同じlocalStorageにアクセスできることを推測しているので、ループチェックが邪魔になります。とにかく、同じスクリプトを使って各タブのlocalStorageに一意の名前を付けることはできませんでした。

このように、同じドメインに新しいURLを開いた後でもタブで使用できるブラウザストレージが必要ですが、同じドメインの別のタブでは使用できません。

+0

あなたは[ 'sessionStorage'](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage)のような何かを探しています? – Kaiido

+0

私は、sessionStorageはセッションが終了した後に削除されたlocalStorageであるという印象を受けました。両者の間に他の違いはありますか?あなたのケースでは、よく、 –

+0

です。セッションはメインウィンドウとそれによって開かれたウィンドウ間でのみ共有されます。 – Kaiido

答えて

2

この目的でWindow.sessionStorageを使用できます。 MDNによると

// Store in `name` in the current tab 
 

 
sessionStorage.setItem('name', 'Some Name'); 
 

 
// Get `name` from sessionStorage 
 

 
var name = sessionStorage.getItem('name'); 
 

 

 
alert(name); // Some Name

例:

のsessionStorageプロパティを使用すると、現在の原点のセッションストレージオブジェクトにアクセスすることができます。 sessionStorageはWindow.localStorageと似ていますが、唯一の違いは、localStorageに格納されたデータの有効期限が設定されていない間に、ページセッションが終了したときにsessionStorageに格納されたデータが消去されることです。ページセッションは、ブラウザが開いている間は続き、ページの再読み込みとリストアを繰り返します。 新しいタブまたはウィンドウでページを開くと、新しいセッションが開始されます、セッションクッキーの仕組みとは異なります。

Source

+0

複数のタブでスクリプトを同時に実行している場合はどうなりますか?私のスクリプトは、その状態で実行されると失敗します。 a)新しく開いたタブが別のタブのlocalStorageにアクセスして変更したか、またはb)新しいタブが開いたときにlocalStorageがきれいに消去されたかのいずれかであると考えられます。これらのタブはすべて同じドメインのもので、同じスクリプトを実行しているため、同じ名前のlocalStorageを作成および変更することができます。 –

+0

@RayArifin 'localStorage'と' sessionStorage'の間に ' の違いがあります。あなたが' sessionStorage'を使うと、ユーザーが2つのタブを開いても問題はありません。すべてのタブにはそれ自身の 'sessionStorage'があります。 –

関連する問題