Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 本地存储和弹出窗口在windows pc上不工作_Javascript_Popup_Local Storage - Fatal编程技术网

Javascript 本地存储和弹出窗口在windows pc上不工作

Javascript 本地存储和弹出窗口在windows pc上不工作,javascript,popup,local-storage,Javascript,Popup,Local Storage,我目前在代码上遇到了一个非常困难的bug。这段代码适用于我的MacOS(firefox、opera、safari和chrome),也适用于我拥有的另一台Windows机器。然而,它不能在朋友的电脑上使用Windows、Opera、Chrome或Edge 代码的作用是: 用户单击按钮 我打开第三方网站的弹出窗口 这会将我重定向回带有url上的代码的站点 我使用该代码获取服务器,该服务器获取用户信息的api 我在弹出窗口中收到该信息并将其保存到localStorage 主窗口检测到存在存储事件并显

我目前在代码上遇到了一个非常困难的bug。这段代码适用于我的MacOS(firefox、opera、safari和chrome),也适用于我拥有的另一台Windows机器。然而,它不能在朋友的电脑上使用Windows、Opera、Chrome或Edge

代码的作用是:

  • 用户单击按钮
  • 我打开第三方网站的弹出窗口 这会将我重定向回带有url上的代码的站点
  • 我使用该代码获取服务器,该服务器获取用户信息的api
  • 我在弹出窗口中收到该信息并将其保存到localStorage
  • 主窗口检测到存在存储事件并显示用户信息
该错误可以通过以下方式表现出来:

  • 弹出窗口被强制关闭(即使未启用windows.close功能) 触发)
  • 即使数据存储在弹出窗口中,我也能看到它 在那里,它不会显示在主窗口存储上
我尝试了postMessage而不是localStorage,它比localStorage效果更好。使用postMessage在Windows上使用Opera的私有模式时,错误不会表现出来

我尝试使用Cookies,但它们不适合我的使用案例,因为我需要保存用户图像,而且它对于cookie来说太大了

我还尝试打开一个新的标签,而不是一个窗口,但错误仍然存在

我总是清除缓存本地存储。我还禁用了扩展。主网站和弹出窗口都位于相同的域和协议上。差异是在/redirect?code=xxxxxxxx下的弹出窗口

另一个奇怪的事实是:我们在git上有两个不同的项目分支:“master”和“develop”。两者都发表在heroku上,“开发”在我朋友的电脑上没有bug。“开发”在“大师”之前,没有冲突,我们合并了,bug出现在“大师”网站上

page.js(主窗口)

popup.js(第一个链接重定向到的窗口)

错误是无声的,任何控制台上都没有错误。谢谢你一直读到这里

function loginButtonAction(event) {

    window.open(fenixRequestUserPermissionURL, '_blank', 'width=750,height=675');
    fenixLoginButton.classList.add('is-loading');

    window.addEventListener('storage', function() {

        var userData = JSON.parse(localStorage.getItem('fenix-user'));
        registerUser(userData);
        localStorage.removeItem('fenix-user');

    });

    event.preventDefault();
    fenixLoginButton.removeEventListener('click', loginButtonAction);
}

fenixLoginButton.addEventListener('click', loginButtonAction);
window.addEventListener('load', function() {

    var params = new URL(window.location.href).searchParams;
    if (params.has('code')) {
        var code = params.get('code');

        fetch('/fetchInfo/' + code)
            .then(function (response) {
                return response.json();
            })
            .then(function(received) {
                localStorage.setItem('fenix-user', JSON.stringify(received));
                window.close();

            }).catch(function(error) {
                console.warn(error);
            });
    }

});