首頁  >  問答  >  主體

javascript - 两个不同的页面之间的window对象之间如何通信

假如我建立了两个页面,分别是demo1.html和demo2.html,我在demo1上给window添加了属性age,并且赋值,那么我在demo2.html如何获得demo1上设置的age属性?
一直以为window是个单例,但是好像不同的页面都会维持一个window对象,不知道是否正确?

天蓬老师天蓬老师2749 天前386

全部回覆(7)我來回復

  • 阿神

    阿神2017-04-10 14:43:53

    同源的话比较好做,上面都有提到。不同源的可以把参数传在url后面,然后在另一个页面中用js解析url

    回覆
    0
  • 怪我咯

    怪我咯2017-04-10 14:43:53

    // Script in window.html
    var a = 0,
        b = window.open('window.html');
    
    console.log(b.a); // 0
    

    除此之外 iframe.contentWindow 也有同樣的效果。

    當然能這樣做還有一個前提是滿足同源策略。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 14:43:53

    你可以使用 storage event 在几个页面间通信,这里有一些资料:

    • 初试WebStorage之localstorage
    • html5 demo

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 14:43:53

    对,localstorage这玩意比较霸气。。

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-10 14:43:53

    Window.postMessage
    https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage

    回覆
    0
  • 怪我咯

    怪我咯2017-04-10 14:43:53

    通过url参数或hash传递参数,不需要window

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-10 14:43:53

    可以用postmessage

    a页面中 var _bp = window.open("b.html");
    _bp.addEventListener("message",function(e){
    _this.filterWindow.postMessage({age:"18"},"指定域");
    }
    b页面 window.postMessage({
    pageStatus:"ready"
    },""指定域"");});
    window.addEventListener("message",function(e){
    console.log(e.data.age);
    },false)

    回覆
    0
  • 取消回覆