帖子
帖子
用户
博客
课程
显示全部楼层
2
帖子
1
勋章
74
Y币

[云开发] openFrame第二次失败

[复制链接]
发表于 2022-8-16 15:21:22
项目是基于react框架的,使用了aMap高德导航模块。在第一次进入此compnent时,useEffect中执行的openFrame能正常打开一个frame。在退出此compnent后再次进入,useEffect代码能正常执行,但openFrame却不能打开相应的frame。奇怪的是,下一次此操作又能正常。即:奇数次进入compnent的useEffect能正常打开frame,偶数次无法正常打开。附代码:
compnent  -------->
const Inspection = () => {

    const [aMap, setAMap] = useState();

    useEffect(() => {
        const _aMap = window.api.require('aMap');
        setAMap(aMap);
        // 调用隐私授权 TODO: 第一次需要有授权弹窗
        _aMap.updateMapViewPrivacy({
            privacyAgree:'didAgree',
            privacyShow:'didShow',
            containStatus:'didContain'
        });
        _aMap.open({
            rect: {
                x: 0,
                y: 0,
                w: window.api.frameWidth,
                h: window.api.frameHeight - 84,  // 屏幕高度减去下面菜单栏高度
                showUserLocation: true,
                zoomLevel: 11
            }
        }, (ret, err) => {
            if (!ret.status) {
                alert(`加载地图失败:${JSON.stringify(err)}`);
            }
        });
        window.api.openFrame({
            name: 'wrap',
            url: 'widget://html/inspection_map_wrap.html',
            rect: {
                x: window.api.frameWidth / 2 - 142 / 2,
                y: window.api.frameHeight * 0.8,
                w: 142,
                h: 47
            },
            fixedOn: 'ui_widget',
            pageParam: {
                status: 'stop'
            }
        });

        return () => {
            window.api.closeFrame({
                name: 'wrap'
            });
            _aMap.close();
        };
    }, []);

    return (
        <div/>
    );
};

html --------->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MapWrap</title>
    <style type="text/css">
        body {
            margin: 0;
        }

        #wrap {
            display: flex;
            justify-content: center;
            align-items: flex-start;
        }

        .button {
            margin: 0 2px 4px 2px;
            width: 138px;
            height: 43px;
            color: white;
            border-radius: 10px;
            outline: none;
            filter: drop-shadow(0px 2px 2px rgba(0, 0, 0, 0.25));
        }
        #start {
            background-color: #49CC9D;
            border: 1px solid #49CC9D;
        }
        #end {
            background-color: #D2743F;
            border: 1px solid #D2743F;
        }
        .hide {
            display: none;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <button id="start" class="button">开始巡检</button>
        <button id="end" class="button hide">结束巡检</button>
    </div>
</body>
<script type="text/javascript" src="../script/api.js"></script>
<script>
    window.apiready = () => {
        const pageParam = window.api.pageParam;
        alert(JSON.stringify(pageParam));
        // if (pageParam.status === 'stop') {
        //     window.document.getElementById('start').classList.remove('hide')
        // }
    };
</script>
</html>


380
帖子
4
勋章
6
Y币
apiready = function (){

  console.log(123)
  放apiready 里面看能不能每次触发
}
2
帖子
1
勋章
74
Y币
html内js代码改成如下后:
<script>
    alert('123');
    window.apiready = () => {
        const pageParam = window.api.pageParam;
        alert(JSON.stringify(pageParam));
        // if (pageParam.status === 'stop') {
        //     window.document.getElementById('start').classList.remove('hide')
        // }
    };
</script>

alert('123')也是按奇数次可以进行弹窗
技术咨询-F · 2022-8-16 15:40apiready = function (){

  console.log(123)
380
帖子
4
勋章
6
Y币
我是说 compnent 组件里
Artorias · 2022-8-16 15:47html内js代码改成如下后:

    alert('123');
2
帖子
1
勋章
74
Y币
放useEffect里不会执行apiready内代码,这个component不是初始加载的的组件,是app加载后用户通过其他操作点击渲染的
技术咨询-F · 2022-8-16 16:10我是说 compnent 组件里
2
帖子
1
勋章
74
Y币
openFrame使用参数fixedOn: 'ui_window'的话每次会弹窗,但是新打开的frame无法在地图上一层进行显示,这个怎么解决呢
技术咨询-F · 2022-8-16 16:10我是说 compnent 组件里
380
帖子
4
勋章
6
Y币
加个settimeout 延时300毫秒打开frame 试试
Artorias · 2022-8-16 16:22放useEffect里不会执行apiready内代码,这个component不是初始加载的的组件,是app加载后用户通过其他操作点击渲染的
2
帖子
1
勋章
74
Y币
找到原因了,应该是aMap模块导致的,打开高德地图时未绑定fixedOn: window.api.frameName会导致openFrame、bringFrameToFront等造成上述问题。
技术咨询-F · 2022-8-16 16:33加个settimeout 延时300毫秒打开frame 试试
380
帖子
4
勋章
6
Y币
好的
您需要登录后才可以回帖 登录

本版积分规则