Javascript 不同的localStorage对象以及如何访问它们

Javascript 不同的localStorage对象以及如何访问它们,javascript,local-storage,session-storage,Javascript,Local Storage,Session Storage,我试图使用localStorage从表单中获取值,并在第二个页面上填充第二个表单的一些字段。存储字段部分工作得很好,但在第二页上,有一个iframe,显然它使用localStorage。当我尝试在第二个页面上使用localStorage时,它会从这个“第二个”localStorage中检索值 // This displays the correct localStorage info, so on page load, it seems to only be 1 localStorage

我试图使用localStorage从表单中获取值,并在第二个页面上填充第二个表单的一些字段。存储字段部分工作得很好,但在第二页上,有一个iframe,显然它使用localStorage。当我尝试在第二个页面上使用localStorage时,它会从这个“第二个”localStorage中检索值

    // This displays the correct localStorage info, so on page load, it seems to only be 1 localStorage
    console.log(localStorage);

    // Retrieve session storage fields
    // This comes back as null, second localStorage is loaded?
    var firstName = localStorage.getItem('firstName');
    var lastName = localStorage.getItem('lastname');
    var eMail = localStorage.getItem('eMail');
    var phone = localStorage.getItem('phone');
    var company = localStorage.getItem('company');
    var companyRole = localStorage.getItem('companyRole');

    // This does not work as a result
    j('#first-name').val(firstName);
    j('#last-name').val(lastName);
    j('#phone').val(phone);
    j('#eMail').val(eMail);
当我在“应用程序”Chrom选项卡下检查localStorage对象时,我看到了两个对象,并检查了第一个对象,我确实看到了我的数据……我没有找到任何关于如何访问其他localStorage对象的信息,这可能吗?

,因为您可以签入:

本地存储是按源(按域和协议)进行的。所有页面,从 一个来源,可以存储和访问相同的数据

因此,如果页面和iframe的域相同,则本地存储数据也相同。这意味着localstorage数据是按域保存的,如果代码在主页或iframe中,则可以独立地对其进行CRUD


,这还意味着,如果页面位于不同于iframe的域中,则只能访问相应域的localstorage。例如,如果javascript代码位于iframe内,则无法访问主页的localstorage,反之亦然。

本地和会话存储特定于源。例如,以下来源将产生不同的本地和会话存储对象:

即使它们是同一个域,它们也有不同的协议。这使他们有了不同的起源


如果您不拥有iframe的域,则没有从您自己的应用程序读取或修改跨源存储的方法。另一个源站需要接收修改存储的请求。

iframe地址是否与您的页面位于同一域中?window.localStorage和window.sessionStorage对象是特定于域的。请看一下:Iframe是否在您的控制下?Iframe不在我的控制下否,它来自不同的域。那么我知道它会覆盖我的对象,对吗?即使我在“应用程序”选项卡下看到了其中的两个。但有一个问题,似乎加载iframe需要一秒钟,并且console.log显示了我的localStorage对象,然后我用这些值设置了一些变量……这应该可以正常工作吗?加载iframe时,我的数据保存在变量上,然后使用它?取决于加载和使用iframe的方式,但我认为这是可能的。但是,请查看并查看它是否回答了您的评论问题您仍然需要其他域的所有权才能在跨来源之间传递信息。我理解,看到“应用程序”选项卡下的两个存储,我认为我可能可以访问不同的存储。谢谢