移动端不支持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,//小窗口页面的地址
});
});
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>
上一篇: H5移动端开发遇见的东西