localStorage または sessionStorage のいずれかを使用できる Javascript クラスを作成しています。これの選択は、クラス インスタンス ベースで行われます。
このクラス内に、ストレージ オブジェクトをパラメーターとして受け取り、ストレージ タイプ (つまり、ローカル v セッション) に従ってアクションを実行するメソッドがあります。
例えば。
function myMethod(store){
// store: object storageObject
// The storage object being used (either
// sessionStorage or localStorage).
if(store === sessionStorage){
return sessionAction(store)
}else if(store === localStorage){
return localAction(store)
}
return null;
}
これは Internet Explorer 8 では機能せず、「クラスはオートメーションをサポートしていません」というエラーが発生します。他のブラウザではうまく動作するようです。
私は(Object.prototype.toString.call( store )を介して)オブジェクトタイプを取得し、それに対してテストしようとしましたが、IE8 は常に [object Object] を報告します。私は Stackoverflow の質問への回答からある程度の進歩を遂げました: Weird IE8 internal [[ class ]] attribute behavior。この回避策により、IE で [オブジェクト ストレージ] が表示されました。
ただし、異なるストレージ タイプを検出することはまだできません。クロスブラウザーで動作する 2 つのタイプを検出する簡単な方法はありますか?
メソッドのパラメーターとして型を指定する必要がないように書き直すことができます。ただし、ユーザーが単純にストレージ オブジェクトを提供できるようにすることで、API の単純さを減らしたいと思います。