Internet Explorer 11(Windows 7ビルド)のlocalStorage
オブジェクトには、期待どおりのネイティブ呼び出しではなく、特定の関数の文字列表現が含まれています。
これはVanilla JavaScriptでのみ壊れ、JSFiddleのようなサイトではこのコードに問題はありませんが、それを修正するlocalStorage
ポリフィルがあるためだと思います。
たとえば、次のHTMLページコードをご覧ください。
<!DOCTYPE html>
<script>
localStorage.setItem('test', '12345');
alert(localStorage.getItem('test'));
localStorage.clear();
</script>
これは、IE11を除く、インストールされているすべてのブラウザーで完全に機能します。最初の行でエラーが発生しました 'SCRIPT5002:Function expected'。
setItem
関数が実際にどのタイプのIE開発者ツールコンソールにあるのかを見てみると、それは文字列であると述べています...?
typeof localStorage.setItem === 'string' // true
setItem
の文字列を印刷すると、次が表示されます。
"function() {
var result;
callBeforeHooks(hookSite, this, arguments);
try {
result = func.apply(this, arguments);
} catch (e) {
callExceptHooks(hookSite, this, arguments, e);
throw e;
} finally {
callAfterHooks(hookSite, this, arguments, result);
}
return result;
}"
奇妙なことに、すべての関数が文字列で置き換えられているわけではありません。たとえば、対応するgetItem
関数は実際には関数であり、期待どおりに機能します。
typeof localStorage.getItem === 'function' // true
ドキュメントモード(エミュレーション)を10または9に変更しても問題は解決せず、両方とも同じエラーになります。ドキュメントモードを8に変更すると、次のエラーが発生します 'オブジェクトはこのプロパティまたはメソッドをサポートしていません' IE8はlocalStorage
をサポートしていません。
localStorage
オブジェクトが「壊れている/壊れている」と思われるWindows 7上のIE11で同じ問題を抱えている人はいますか?
これは、Windows 7 SP1のIE11の基本バージョン(11.0.9600.16428)の問題であることがわかりました。
パッチのインストール で11.0.9600.16476(バージョン11.0.2の更新-KB2898785)に更新すると、問題は解決します。 Windowsの他のバージョン(32ビットなど)へのリンクは、 パッチダウンロードページ の下部にあります。
IE11のせいではありません。
おそらく [〜#〜] weinre [〜#〜] がページに挿入されます。 開発者ツール機能を提供するためにいくつかのシステム関数にフックする 、ただしIE11はlocalStorage
およびsessionStorage
プロパティへの割り当てを誤って解釈し、フック関数を文字列に変換します。それらが保存されるデータである場合。
Apache/cordova-weinreリポジトリのコメント があります:
#In IE we should not override standard storage functions because IE does it incorrectly - all values that set as
# storage properties (e.g. localStorage.setItem = function()[...]) are cast to String.
# That leads to "Function expected" exception when any of overridden function is called.
object[property] = hookedFunction unless navigator.userAgent.match(/MSIE/i) and (object is localStorage or object is sessionStorage)
古いバージョンのWEINREが使用されているか、この変更が公式にリリースされていないようです( 2013年から存在しています )。
LocalStorageが未定義で返されたので、理由がわからなかった-それがわかったまで(localStorageスクリプトで)HTMLページをコンピューターから直接実行していたため(file:/// C:/ Users/...)。代わりにserver/localhostからページにアクセスすると、localStorageが実際に定義され動作しました。