Layui layer弹层组件 子iframe大小比父iframe大,还可对父iframe进行操作

标签: 其他  Layui  Layer  layui-layer  子iframe大小比父iframe大  对父iframe进行操作

一、问题描述

1、督办操作界面。图中框住的窗口,iframe的id为layui-layer-iframe1。

2、在督办操作界面中点击常用语配置,弹出常用语管理界面,iframe的id为layui-layer-iframe2。双击常用语,可以将常用语回显在督办操作界面中。

3、使用layer.open,在督办操作界面中打开常用语管理界面,然后在常用语管理界面中对父窗口督办操作界面进行回显就可以了。但是子iframe大小不能比父iframe大,进而影响了界面的展示。

二、解决方法

1、使用top.layer.open,在督办操作界面中打开常用语管理界面。现在大小只会受到最顶层top层的限制了,常用语不能回显了。因为现在常用语管理界面已经不是督办操作界面的子iframe了,所有不能在常用语管理界面直接对督办操作界面进行操作。

2、解决方法,获取督办操作界面iframe的id路径,从当前层一直到top层,然后传给常用语管理界面。

function openPhraseEdit() {
    top.layer.open({
        type: 2,
        title: "常用语管理",
        area: ["1000px", "700px"],
        content: top.getRealPath() + "/hfCityPhrase/openPhrase?framePath=" + getFramePath(),
    });
}
/*获取当前iframe层到top层的id集合(每个iframe层必须有id)*/
function getFramePath() {
    var framePath = '';
    var frameIndex = 0;
    var win = window;
    var frameId;
    while (win.frameElement != null) {
        var frame = win.frameElement;
        frameId = win.frameElement.id;
        if (frameId == 'top')
            break;
        if (framePath == '') {
            framePath += frameId;
        } else {
            framePath += "," + frameId;
        }
        win = win.parent;
    }
    return framePath;
}

3、根据督办操作界面传过来iframe的id路径,在常用语管理界面中获得督办操作界面的对象,这样子就可以对其进行界面的操作,常用语进行回显了。

常用语管理界面中的代码:
/*在常用语管理界面选择常用语并回显到督办操作界面中,最后还要关闭常用语管理界面*/
function setPhraseContentAndClose(content) {
    var win = getFrameContentWindow('${framePath}');//获取督办操作界面对象
    win.setContent(content);//
    var currentIndex = parent.layer.getFrameIndex(window.name);
    parent.layer.close(currentIndex);//关闭常用语管理界面
}
督办操作界面中的代码:
function setContent(content) {
   $("#superviseOpinion").val(content);
}

原文链接:加载失败,请重新获取