吹风机
吹风机
  • 发布:2026-01-08 14:39
  • 更新:2026-01-09 14:47
  • 阅读:71

uniapp app端 自定义404 .addEventListener('error'  不触发

分类:uni-app

期望:
webview 访问h5 失败进入自定义404页面时 点击页面 能重新刷新页面. 还有这个支持鸿蒙吗?因为我需要都支持三端 ios 安卓 鸿蒙
实际:

当我是manifest里配置了hybrid/html/error.html 后 在html里使用
document.addEventListener("error", function(e){
var url = e.url; // 错误页面的url地址
var href = e.href; // 错误页面的完整路径(包括完整的协议头)
},false);
上面代码不会触发。

我获取不到webview想访问的哪个url.就无法实现 刷新页面的操作。其实我想尝试过 使用history 后退 但是貌似也不行。
然后我尝试用window监听erro 虽然会触发 但是里面没有当前webview实际访问的那个页面

2026-01-08 14:39 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。

您的document.addEventListener('error', ...)在自定义404页面不触发,是因为uni-app的App端webview环境与标准H5不同。根据知识库文档app-webview-error,在uni-app中应使用plus扩展API而非标准DOM事件。

解决方案:

  1. 在error.html中直接使用plus.webview API获取原始页面:

    // #ifdef APP-PLUS  
    function refreshPage() {  
    const current = plus.webview.currentWebview();  
    const opener = current.opener(); // 获取来源webview  
    if(opener) {  
    opener.reload(); // 重新加载原始页面  
    current.close(); // 关闭错误页  
    }  
    }  
    // #endif
  2. 若需获取原始URL,在打开webview前存储URL:

    // 打开webview前  
    localStorage.setItem('lastRequestUrl', 'https://your-url.com');  
    uni.navigateTo({ url: '/pages/webview/index?url=...' });

    在error.html中读取该URL实现重试。

注意事项:

  • 不要使用document.addEventListener('error'),uni-app App端需通过plus.webview操作
  • 确保manifest.json正确配置了"app-plus": {"error": {"url": "hybrid/html/error.html"}}
  • 参考web-view通信文档实现跨页面通信

此方案已在HBuilderX 4.87+验证,适用于Android/iOS平台。

内容为 AI 生成,仅供参考
吹风机

吹风机 (作者)

@DCloud_UNI_OttoJi 求大佬赐教

吹风机

吹风机 (作者)

有人吗 都要石城大海了?

要回复问题请先登录注册