欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

移动端不支持window.open,回调函数callback和opener异常,弹出窗口子页面调用原来父页面的方法

程序员文章站 2024-03-15 23:09:06
...

1.移动端不支持window.open

移动端是不支持window.open打开小窗口的,会自动转成打开一个新页面,你可以使用第三方插件layer.open实现打开小窗口的功能。

第三方插件layer.open的使用可以参考官方API地址如下
layer.open官方API

分享一个我的代码和效果图:

  	  $('#gyslb').on('click', function(){
  	  var gslbs = $("#gslb").val();
	 layer.config({
	      extend: '../../../layer.css' //自定义定义手机端弹窗皮肤,可以省略
	   });
	 layer.open({
	      type: 2,
	      area: ['90%', '90%'],
	      title: '选择经营品目',
	      shadeClose: true, //点击遮罩关闭
	      //maxmin: true, //最大、最小按钮
	      content: '../../****.html,//小窗口页面的地址
	    });
  });

移动端不支持window.open,回调函数callback和opener异常,弹出窗口子页面调用原来父页面的方法

2.移动端不支持opener,导致回调函数异常

使用了layer.open后,可以把opener换成parent,即可解决这个问题

3. layer弹出层父子页面事件相互调用方法

原文
父页面

<body>
 
<a data-url="bbbb.html" id="parentIframe">小小提示层</a>
<input id="shuzhi" />
<button class="but_par">父页面</button>
</body>
<script src="../jquery-1.9.1.min.js"></script>
<script src="layer/layer.js"></script>
<script>
$(function(){
$("#parentIframe").click(function(){
var a = $(this).attr("data-url");
layer.open({
  type: 2,
  content: a,
  success: function(layero, index){
    var body = layer.getChildFrame('body', index);//获取子页面内容
    var iframeWin = window[layero.find('iframe')[0]['name']]; //得到iframe页的窗口对象,执行iframe页的方法:iframeWin.method();
   body.find("#transmit").click();//执行子页面的方法
    body.find('input').val('Hi,我是从父页来的')
    $(".but_par").click(function(){
    alert(222);
    })
  }
}); 
})
})

子页面

<body>
<input id="name" value="不满意" />
<button id="transmit">给父层传值</button>
</div>
</body>
<script>
$(function(){
$(document).on("click","#transmit").click(function(){
parent.$("#shuzhi").val($("#name").val());
parent.location.reload(); 刷新父页面
//关闭layer弹出层
var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
parent.layer.close(index);
})
window.parent.$(".but_par").click();//执行父页面的事件
})
</script>