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

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,//小窗口页面的地址
	    });
  });

在这里插入图片描述

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值