使用window.open打开的页面,如何嵌入js并执行?

在窗口1中使用window.open打开的页面(窗口2),
如何在窗口1中写js,控制窗口2

阅读 5.8k
3 个回答

跨域吗?

跨域如果目标站点不是你自己写的,那没办法。

你想想,如果你自己做了一个钓鱼网站,window.open 打开一个网银页面,然后还能通过 JS 操作网银的页面?这浏览器能不防你?

如果也是你自己写的,那么用 postMessage 来传递 JS 代码吧,执行结果再传回去。

同域的话 window.open 的返回值就是你打开的页面的 window 对象,有了它你原来咋动态加载 JS 现在还咋动态加载。

判断下浏览器切换事件,切换到窗口2时候重新拿一次页面数据

let hiddenProperty = 'hidden' in document ? 'hidden' : 
 'webkitHidden' in document ? 'webkitHidden' : 
 'mozHidden' in document ? 'mozHidden' : 
 null;
let visibilityChangeEvent = hiddenProperty.replace(/hidden/i, 'visibilitychange');
let onVisibilityChange = function(){
 if (!document[hiddenProperty]) { 
 console.log('页面非激活');
 }else{
 console.log('页面激活')
 }
}
document.addEventListener(visibilityChangeEvent, onVisibilityChange);

其实我在想:

  1. 你是否必须要window.open来打开新页面?是否能采用模拟的形式展示内容,这样实质在一个页面下,更好交互控制。
  2. 如果必须采用window.open,则A页面和新打开的B页面的关系,是否涉及跨域(涉及安全问题,除非B页面服务器上有相应接口,否则A页面无法和B进行通信及控制),以及具体需要控制哪些?

    1. 不涉及跨域下,具体通信实现的机制是完全客户端的,这就是页面间通信机制
    2. 还是经由某个服务端协助实现,比如A可以访问某个公共服务,B可以同步从这个服务的延生处理中获取新数据来更新
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题