2.3.4 webmobile Chrome 全屏有灰邊

  • Creator 版本: 2.3.4

  • 目标平台:webmobile/Chrome

  • 重现方式:
    在Chrome瀏覽器,
    偵聽touchstart時呼叫cc.screen.requestFullScreen();
    會全屏,但會出現灰邊,但在灰邊那邊做滑動就會完全全屏,
    有試過用windows.scrollTo(0,1);也沒有用。
    也有嘗試cc.view.enableAutoFullScreen(false) 或cc.view.enableAutoFullScreen(true)
    也沒有效果。

請問是否有解決方式。因產品要上線遇到此問題,希望能得到幫忙,謝謝

1赞

人工置頂,希望能有遇到相同問題的人可以分享一下解決方式,非常感謝
我這邊也會持續嘗試其他方式,有找到方法的話也會再回應上來。

能否给一下 demo 呢?我这边测试看看?

ChromeTest.zip (221.0 KB)

這個是我測試的專案,輸出webmobile版本,在Android手機用Chrome打開網頁即可。

你说的灰边是下方图红框的效果?

是的,而且用手在灰邊滑動一下就會變完整的全螢幕

我这边测试是正常的,是否是特定的机型导致的呢?我 chrome 是最新版本

image

怪了,
我的Chrome版本 87.0.4280.101
但我這邊用ASUS ROG Phone1 (86.0)、Sasmsung S6(87.0)、Pixel4(87.0)都會出現這個灰邊

你用你给我的 demo 也测试一下,然后截图我看一下效果

你用 chrome://inspect/#devices 调试一下吧,看看是什么导致他向上移动


我測試
直式-
要改GameCanvas內Style的height改成775就會變全螢幕,就沒有灰邊。
改body style的height反而沒效
橫式-
GameCanvas內Style的height改成412

没改之前是如何的?
应该是有同步 GameCanvas 的

沒改之前就是如同上面截圖,當時height是719 px,
我滑動灰邊變成全螢幕後,看到height變成775px,
所以我重load一次,我直接把719改成775,就自動校正成沒有灰邊。

那你调试一下,在 CCView 里面看看为什么 height 不是 775 而是 719

可以在 setDesignResolutionSize 这个函数打个断点调试一下

目前我的暫時解法是再偵測orientationchange和resize,
再針對 cc.game.canvas.style.width和 cc.game.canvas.style.height再修正一次螢幕比。
就沒有灰邊,
此作法可以先供參考。

start ()
{
window.addEventListener(“orientationchange”, function(event)

    {

        var DevicePixelRatio=window.devicePixelRatio;

        if ( window.orientation == 180 || window.orientation == 0 ) 

        {

           //直立

           cc.game.canvas.style.width=(1280/DevicePixelRatio).toString()+"px";

           cc.game.canvas.style.height=(720/DevicePixelRatio).toString()+"px";

        }

        if( window.orientation == 90 || window.orientation == -90 ) 

        {

           //橫式

           cc.game.canvas.style.width=(1280/DevicePixelRatio).toString()+"px";

           cc.game.canvas.style.height=(720/DevicePixelRatio).toString()+"px";

        }

    });

    window.addEventListener("resize", function(event)

    {

        var DevicePixelRatio=window.devicePixelRatio;

        if ( window.orientation == 180 || window.orientation == 0 ) 

        {

           //直立

           cc.game.canvas.style.width=(1280/DevicePixelRatio).toString()+"px";

           cc.game.canvas.style.height=(720/DevicePixelRatio).toString()+"px";

        }

        if( window.orientation == 90 || window.orientation == -90 ) 

        {

           //橫式

           cc.game.canvas.style.width=(1280/DevicePixelRatio).toString()+"px";

           cc.game.canvas.style.height=(720/DevicePixelRatio).toString()+"px";

        }

    });

    document.addEventListener('mousedown', function testFullScreen () {

        if(cc.screen.fullScreen()==false )

        {

            cc.screen.requestFullScreen();

       

        }

      }, true);

      document.addEventListener('touchstart', function testFullScreen () {

        if(cc.screen.fullScreen()==false )

        {

            cc.screen.requestFullScreen();

        }

      }, true);

}

但剛測試發現這樣的改法在一些特殊螢幕解析度似乎還有些問題,
像是ASUS ROm phone1比例是18:9 這樣調整就會有誤差

最後有找到方向,
看起來是Touch event和_fixContainer 時序問題,
所以只需要把呼叫requestFullScreen()延後呼叫即可。

document.addEventListener(‘touchstart’, function TestFullScreen() {

        if(cc.screen.fullScreen()==false )

        {

            setTimeout(()=>{

                cc.screen.requestFullScreen(); }, 1500);

        }
      }, true);

能分享一下 你们是如何做屏幕适配的吗

我們主要是橫向 Landscape模式,
我們固定在1280X720,
所以在Start()我有加 cc.view.setDesignResolutionSize(1280, 720 , cc.ResolutionPolicy.SHOW_ALL);
另外就是addEventListener ‘touchstart’,做呼叫cc.screen.requestFullScreen();變成全屏,
這樣網址列就會不見。

目前測試iOS Safari可正常全屏,但iOS Chrome無法全螢幕(這是ios Chrome問題)
Android上,Chrome也正常全屏