原因分析
layui使用layer对象的index来防止多窗口id冲突,但是打开iframe窗口时会产生新的layer对象,所以子窗口的layer.index重新从0开始计算,如果子页面打开iframe窗口次数过多,会让layer.index++至父页面相同的值,此时就会产生窗口覆盖。
解决方法
更改代码块1:
找到源码中的下面这段代码,改变获取index的方式。
var Class = function(setings){
var that = this;
//that.index = ++layer.index;//之前的代码
that.index = "-" + setings.id + (++layer.index);//更改后代码
that.config = $.extend({}, that.config, ready.config, setings);
document.body ? that.creat() : setTimeout(function(){
that.creat();
}, 30);
};
更改代码块2:上面的更改会导致zIndex失效,需要更改zIndex计算方式
找到源码中的下面这段代码,改变获取zIndex的方式。
//容器
Class.pt.vessel = function(conType, callback){
var that = this, times = that.index, config = that.config;
var zIndex = config.zIndex + layer.index//更改后代码
//config.zIndex + times(这个是之前的代码,由于改变了index的获取方式,导致这种方式不可用)
, titype = typeof config.title === 'object';