cc.screen相关的API修改建议

浏览器

cc.screen有几个接口用于处理全屏,这几个接口很容易引起document not active报错,播放全屏视频内部会调用该接口

如下面


/**
     * exit the full mode.
     * @method exitFullScreen
     * @return {Boolean}
     */
    exitFullScreen: function (element) {
        if (element && element.tagName.toLowerCase() === "video") {
            if (cc.sys.os === cc.sys.OS_IOS && cc.sys.isBrowser) {
                element.webkitExitFullscreen && element.webkitExitFullscreen();
                return;
            }
            else {
                element.setAttribute("x5-video-player-fullscreen", "false");
            }
        }
        return this._supportsFullScreen ? document[this._fn.exitFullscreen]() : true;
    },

Web Api标准里面,document.exitFullscreen()返回的是一个Promise对象而非boolean。

https://developer.mozilla.org/en-US/docs/Web/API/Document/exitFullscreen

官方能否统一该接口的返回参数?

暂时的修改方式


        cc.screen.$exitFullScreen = cc.screen.exitFullScreen;
        cc.screen.exitFullScreen = function(){
            let result = Promise.resolve( cc.screen.$exitFullScreen() );
            result.catch( (err)=>{
                cc.log(err);
            } )
        }

1赞

看起来你的改动好像也没解决这个 document not active 的报错,只是把报错转换成了普通的 log?

是的,只是不让爆红

顶个旧帖

虽然不影响游戏

但看着收集错误回报的日志一直有这项看着就有点烦人就是了

这个好像还是解决不了报错问题

// 保存原生方法

    cc.screen.$exitFullScreen = cc.screen.exitFullScreen;

    // 重写退出全屏函数

    cc.screen.exitFullScreen = function () {

        // 执行原生退出全屏逻辑

        const promise = cc.screen.$exitFullScreen();

        // 捕获所有报错,杜绝 Uncaught (in promise)

        return promise.catch((err) => {

            cc.log("退出全屏捕获异常,忽略:", err);

            // 报错后返回正常Promise,不阻塞业务

            return Promise.resolve();

        });

    };

试了试这个可用