uni-app plusReady() 事件触发延迟严重,需50秒

uni-app plusReady() 事件触发延迟严重,需50秒

测试过的手机

手机型号
hwmate30

示例代码:

// 加载是 web 服务器端 的 html5;h5页面加载很多的js,jQuery 等。
......

// H5 plus事件处理
function plusReady(){
console.log("\n---- plusReady...");
}

if(window.plus){
plusReady();
}else{
document.addEventListener('plusready', plusReady, false);
console.log("\n----addEventListener('plusready')");
}

操作步骤:

  • 禁止WiFi,使用5G网络

预期结果:

plusReady(){
}
希望在 1s 内被调用

实际结果:

  • 实际是 WiFi下 1s 内,5G下要 50秒。

bug描述:

  • 从 web端加载的 h5页面, plusReady() 要50秒才调用啊;
  • 1)wifi下手机调试很快 1s。
  • 2)5G下,手机调试, 收到 plusReady() 事件要50秒啊,而且是 每次都 1分钟。
  • 3)5G(700M/s)的网络比wifi 还要快速的,测试过的。

更多关于uni-app plusReady() 事件触发延迟严重,需50秒的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

搜索,都是把问题一知半解的,搞毛啊; 完整的是下面的

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <title>HTML5+ API</title> <script src="html5plus://ready"></script> <script type="text/javascript" charset="utf-8"> // 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断 if(window.plus){ // 在这里调用5+ API }else{// 兼容老版本的plusready事件 document.addEventListener('plusready',function () { // 在这里调用5+ API },false); } </script> </head> <body> Hello HTML5 plus. </body> </html>

更多关于uni-app plusReady() 事件触发延迟严重,需50秒的实战教程也可以访问 https://www.itying.com/category-93-b0.html


<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <title>HTML5+ API</title> <script src="html5plus://ready"></script> <script type="text/javascript" charset="utf-8"> // 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断 if(window.plus){ // 在这里调用5+ API }else{// 兼容老版本的plusready事件 document.addEventListener('plusready',function () { // 在这里调用5+ API },false); } </script> </head> <body> Hello HTML5 plus. </body> </html>
<head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <title>HTML5+ API</title>
<script src="html5plus://ready"></script>    
<script type="text/javascript" charset="utf-8">    

// 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断 if(window.plus){ // 在这里调用5+ API }else{// 兼容老版本的plusready事件 document.addEventListener(‘plusready’,function () { // 在这里调用5+ API },false); } </script>

</head>
<head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/> <title>HTML5+ API</title>
<script src="html5plus://ready"></script>    
<script type="text/javascript" charset="utf-8">    

// 这里可以调用5+ API了,为了更好的兼容性,应该使用以下代码进行判断 if(window.plus){ // 在这里调用5+ API }else{// 兼容老版本的plusready事件 document.addEventListener(‘plusready’,function () { // 在这里调用5+ API },false); } </script>

</head>

在5G网络下出现plusReady延迟50秒的问题,通常与网络环境相关而非uni-app框架本身。以下是关键分析:

  1. plus对象检测机制:代码中通过window.plus判断运行环境,但H5页面在5G网络下可能出现全局对象注入延迟。建议在DOMContentLoaded事件后重新检测:

    document.addEventListener('DOMContentLoaded', () => {
      if (window.plus) {
        plusReady();
      } else {
        document.addEventListener('plusready', plusReady, false);
      }
    });
    
  2. 网络策略影响:5G基站可能对非标准端口或HTTP协议的资源加载存在策略限制,导致原生层与WebView通信延迟。检查是否因网络策略阻塞了plus对象的初始化。

  3. 资源加载竞争:页面若包含大量外部JS(如jQuery),在5G网络下可能因DNS解析、CDN节点差异或TCP连接复用问题,阻塞了原生事件的触发。可尝试以下优化:

    • 将关键JS改为内联或异步加载
    • 使用<script defer>控制加载顺序
  4. 超时备选方案:增加超时逻辑避免无限等待:

    setTimeout(() => {
      if (!window.plus) console.warn('Plus初始化超时');
    }, 3000);
回到顶部