Javascript localStorage事件侦听器不会在Chrome中为本地文件启动

Javascript localStorage事件侦听器不会在Chrome中为本地文件启动,javascript,jquery,html,google-chrome,local-storage,Javascript,Jquery,Html,Google Chrome,Local Storage,更改localStorage时需要通知我。这段代码在Firefox24中运行良好,但在Chrome29(或30)或IE10中不起作用。它也可以在实时服务器上工作,但在我使用本地文件(文件://)进行测试时不起作用 代码如下: <!DOCTYPE html> <html> <head> <title>Index</title> <script src="http://code.jquery.com/jquery-1.

更改
localStorage
时需要通知我。这段代码在Firefox24中运行良好,但在Chrome29(或30)或IE10中不起作用。它也可以在实时服务器上工作,但在我使用本地文件(
文件://
)进行测试时不起作用

代码如下:

<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('#submit').click(function() {
                console.log('Clicked');
                if($('#username').val() != "")
                    localStorage.setItem('someItem', 'someValue');
            });
            $(window).bind('storage', function(e) {
                alert('change');
            });


        });
    </script>
</head>
<body>
<input type="text" id="username" name="username" value="" />
<a href="#" id="submit">Click me</a>
<p id="result"></p>
</body>
</html>

指数
$(文档).ready(函数(){
$(“#提交”)。单击(函数(){
console.log('Clicked');
如果($('#username').val()!=“”)
setItem('someItem','someValue');
});
$(窗口).bind('storage',函数(e){
警报(“变更”);
});
});


这在Chrome中有什么问题?我正在按要求打开两个选项卡。

它只会在“其他”选项卡/窗口中触发事件,而不会在更改数据的选项卡/窗口中触发事件(您的问题中有点不清楚,如果我误解了,请纠正我)

当对调用setItem()、removItem()和clear()方法时 与本地存储区域关联的存储对象x,如果 方法做了一些事情,然后在每个文档对象中 对象的localStorage属性的存储对象与 同一存储区域,而不是x,必须触发存储事件, 如下所述

更新根据评论完成回答:

由于安全原因,如果页面是从文件协议(
文件://
)运行的,则某些浏览器会有限制

在Chrome中,您可以通过提供参数“允许从文件访问文件”,来覆盖此选项:

chrome.exe --allow-file-access-from-files

我不确定你是否可以用其他浏览器做类似的事情。我建议使用本地服务器(例如)进行测试,以避免在实时场景中遇到任何意外情况。

我阅读了W3C的规范,我想我理解它,我的问题是我打开了两个选项卡,在选项卡2中,我更改了localStorage的值,但选项卡1没有任何变化。你试过Chrome版本29吗?@TrungHuynh请提供一把小提琴,我可以用它来测试。给你!但它需要两个选项卡才能完全运行,因为遵循规范,它无法侦听更改本地存储的选项卡。@TrungHuynh-Hm,测试只给了我以下错误消息:
Uncaught SecurityError:试图突破用户代理的安全策略。
可能是由于JSFIDLE使用了iframe。顺便说一句:你是在本地服务器上还是在
文件://
上测试这个问题?@TrungHuynh是的,文件协议受到安全限制(IIRC你可以强制Chrome允许文件协议被使用,使用
--允许文件访问
作为参数。我不确定Firefox等是否也可以使用同样的协议)。