国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Web頁面白屏問題的排查步驟和解決方法

HarmonyOS開發者 ? 來源:HarmonyOS開發者技術 ? 2025-08-22 10:49 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Web頁面出現白屏的原因眾多,本文列舉了若干常見白屏問題的排查步驟,供開發者快速定位。

1.首先排查權限和網絡狀態。

2.通過使用DevTools工具調試前端頁面定位具體報錯類型(跨域、資源404、JS異常)。

3.在復雜布局場景中,排查渲染模式及組件約束條件的問題。

4.處理H5代碼兼容性問題。

5.從日志中排查生命周期和網絡加載相關關鍵字。

檢查權限和網絡狀態

如果應用未開啟聯網或文件訪問權限或者設備網絡狀態不佳,將導致Web組件加載失敗或頁面元素缺失,進而引起白屏。

驗證設備的網絡狀態,包括是否已連接網絡,設備自帶的瀏覽器能否正常訪問網頁等(在線頁面場景)。

確保應用已添加網絡權限:ohos.permission.INTERNET(在線頁面必需)。

// 在module.json5中添加相關權限
"requestPermissions":[
 {
  "name":"ohos.permission.INTERNET"
 }
]

開啟相關權限:

d132f0a4-7d9c-11f0-a18e-92fbcf53809c.png

// xxx.ets
import{ webview }from'@kit.ArkWeb';
@Entry
@Component
structWebComponent{
controller: webview.WebviewController=newwebview.WebviewController();
build() {
 Column() {
  Web({src:'www.example.com',controller:this.controller})
    .domStorageAccess(true)
    .fileAccess(true)
    .imageAccess(true)
    .onlineImageAccess(true)
    .javaScriptAccess(true)
  }
 }
}

修改UserAgent后再觀察頁面是否恢復正常。

// xxx.ets
import{ webview }from'@kit.ArkWeb';
import{BusinessError}from'@kit.BasicServicesKit';
@Entry
@Component
structWebComponent{
controller: webview.WebviewController=newwebview.WebviewController();
@StatecustomUserAgent:string=' DemoApp';
build() {
 Column() {
  Web({src:'www.example.com',controller:this.controller})
   .onControllerAttached(() =>{
   console.log("onControllerAttached");
   try{
    letuserAgent =this.controller.getUserAgent() +this.customUserAgent;
    this.controller.setCustomUserAgent(userAgent);
    }catch(error) {
    console.error(`ErrorCode:${(errorasBusinessError).code}, Message:${(errorasBusinessError).message}`);
    }
   })
  }
 }
}

使用DevTools工具進行頁面內容驗證

在確保網絡與權限配置無誤后,若仍出現白屏,則應利用DevTools工具調試前端頁面以及監聽Web相關錯誤上報接口,來定位具體報錯類型。

1.查閱控制臺的錯誤信息,定位具體的資源加載失敗問題。資源加載失敗會導致頁面元素缺失,布局紊亂,圖片和動畫效果失效等,嚴重時可能導致渲染進程崩潰,頁面呈現空白。如圖所示,依次排查:

(1)元素是否完整,html元素、結構是否正確。

(2)控制臺是否有報錯。

(3)網絡里面是否有資源加載時間特別長等。

d1499fde-7d9c-11f0-a18e-92fbcf53809c.png

2.檢查控制臺,確認是否存在因MixedContent策略或CORS策略導致的異常,或JS錯誤等。可參考解決Web組件本地資源跨域問題。為了提高安全性,ArkWeb內核禁止file協議和resource協議訪問跨域請求。因此,在使用Web組件加載本地離線資源的時候,Web組件會攔截file協議和resource協議的跨域訪問。Web組件無法訪問本地跨域資源時,DevTools控制臺會顯示報錯信息:

Accesstoscriptat'xxx'fromorigin'xxx'has been blockedbyCORS policy:Crossorigin requestsareonlysupportedforprotocol schemes:  http, arkweb, data, chrome-extension, chrome, https, chrome-untrusted.

有如下兩種解決方法:

方法一:

開發者應使用http或https協議替代file或resource協議,確保Web組件能夠成功訪問跨域資源。替代的URL域名應為自定義構造,僅限于個人或組織使用,以防止與互聯網上的實際域名沖突。此外,開發者需要利用Web組件的onInterceptRequest方法,對本地資源進行攔截和相應替換。

以下結合示例說明如何使用http或者https等協議解決本地資源跨域訪問失敗的問題。其中,index.html和js/script.js文件置于工程的rawfile目錄下。當使用resource協議訪問index.html時,js/script.js文件因跨域而被攔截,無法加載。在示例中,使用https://www.example.com/域名替換了原有的resource協議,同時利用onInterceptRequest接口替換資源,確保js/script.js文件可以成功加載,從而解決跨域攔截問題。

// main/ets/pages/Index.ets
import{ webview }from'@kit.ArkWeb';
@Entry
@Component
structIndex{
@Statemessage:string='Hello World';
webviewController: webview.WebviewController=newwebview.WebviewController();
// 構造域名和本地文件的映射表
 schemeMap =newMap([
  ["https://www.example.com/index.html","index.html"],
  ["https://www.example.com/js/script.js","js/script.js"],
 ])
// 構造本地文件和構造返回的格式mimeType
 mimeTypeMap =newMap([
  ["index.html",'text/html'],
  ["js/script.js","text/javascript"]
 ])
build() {
 Row() {
  Column() {
   // 針對本地index.html,使用http或者https協議代替file協議或者resource協議,并且構造一個屬于自己的域名。
   // 本例中構造www.example.com為例。
   Web({src:"https://www.example.com/index.html",controller:this.webviewController})
     .javaScriptAccess(true)
     .fileAccess(true)
     .domStorageAccess(true)
     .geolocationAccess(true)
     .width("100%")
     .height("100%")
     .onInterceptRequest((event) =>{
     if(!event) {
      return;
      }
     // 此處匹配自己想要加載的本地離線資源,進行資源攔截替換,繞過跨域
     if(this.schemeMap.has(event.request.getRequestUrl())) {
      letrawfileName:string=this.schemeMap.get(event.request.getRequestUrl())!;
      letmimeType =this.mimeTypeMap.get(rawfileName);
      if(typeofmimeType ==='string') {
       letresponse =newWebResourceResponse();
       // 構造響應數據,如果本地文件在rawfile下,可以通過如下方式設置
        response.setResponseData($rawfile(rawfileName));
        response.setResponseEncoding('utf-8');
        response.setResponseMimeType(mimeType);
        response.setResponseCode(200);
        response.setReasonMessage('OK');
        response.setResponseIsReady(true);
       returnresponse;
       }
      }
     returnnull;
     })
   }
   .width('100%')
  }
  .height('100%')
 }
}
 


 




// main/resources/rawfile/js/script.js
constbody =document.body;
constelement =document.createElement('div');
element.textContent='success';
body.appendChild(element);

方法二:

通過setPathAllowingUniversalAccess設置一個路徑列表。當使用file協議訪問該列表中的資源時,允許進行跨域訪問本地文件。此外,一旦設置了路徑列表,file協議將僅限于訪問列表內的資源(此時,fileAccess的行為將會被此接口行為覆蓋)。路徑列表中的路徑應符合以下任一路徑格式:

1.應用文件目錄通過Context.filesDir獲取,其子目錄示例如下:

/data/storage/el2/base/files/example

/data/storage/el2/base/haps/entry/files/example

2.應用資源目錄通過Context.resourceDir獲取,其子目錄示例如下:

/data/storage/el1/bundle/entry/resource/resfile

/data/storage/el1/bundle/entry/resource/resfile/example

當路徑列表中的任一路徑不滿足上述條件時,系統將拋出異常碼401,并判定路徑列表設置失敗。如果路徑列表設置為空,file協議的可訪問范圍將遵循fileAccess規則,具體示例如下。

// main/ets/pages/Index.ets
import{ webview }from'@kit.ArkWeb';
import{BusinessError}from'@kit.BasicServicesKit';
@Entry
@Component
structWebComponent{
controller:WebviewController=newwebview.WebviewController();
uiContext:UIContext=this.getUIContext();
build() {
 Row() {
  Web({src:"",controller:this.controller})
    .onControllerAttached(() =>{
    try{
     // 設置允許可以跨域訪問的路徑列表
     this.controller.setPathAllowingUniversalAccess([
      this.uiContext.getHostContext()!.resourceDir,
      this.uiContext.getHostContext()!.filesDir+"/example"
      ])
     this.controller.loadUrl("file://"+this.uiContext.getHostContext()!.resourceDir+"/index.html")
     }catch(error) {
     console.error(`ErrorCode:${(errorasBusinessError).code}, Message:${(errorasBusinessError).message}`);
     }
    })
    .javaScriptAccess(true)
    .fileAccess(true)
    .domStorageAccess(true)
  }
 }
}
 



 
 Demo
 
 



 loadFile
// main/resources/resfile/js/script.js
constbody =document.body;
constelement =document.createElement('div');
element.textContent='success';
body.appendChild(element);

3.查看onErrorReceive、onHttpErrorReceive、onSslErrorEvent、onHttpAuthRequest、onClientAuthenticationRequest等錯誤上報接口是否有被調用。請根據返回的錯誤碼,對照網絡協議棧錯誤列表進行排查。

d15f2b10-7d9c-11f0-a18e-92fbcf53809c.png

復雜的布局與渲染模式導致白屏

若頁面使用了復雜布局或渲染模式,需注意其應用場景和約束條件,不當使用可能導致布局混亂或白屏。

Web組件提供了兩種渲染模式,能夠根據不同的容器大小進行適配,從而滿足使用場景中對容器尺寸的需求,詳情見Web組件渲染模式。在使用過程中需要注意以下幾點:

異步渲染模式下(renderMode:

RenderMode.ASYNC_RENDER),Web組件的寬高不能超過7,680px(物理像素),超過會導致白屏。

同步渲染模式下(renderMode:

RenderMode.SYNC_RENDER),Web組件的寬高不能超過500,000px(物理像素),超過會導致白屏。

Web組件提供了自適應頁面布局的能力,詳情見 Web組件大小自適應頁面內容布局,使用時也需要注意以下約束條件:

配置同步渲染模式:webSetting({renderingMode: WebRenderingMode.SYNCHRONOUS})。

關閉滾動效果:webSetting({overScrollMode: OverScrollMode.NEVER})。

此模式下不支持動態調整組件高度,確保頁面高度固定。

避免在FIT_CONTENT模式下啟用鍵盤避讓屬性RESIZE_CONTENT,以免導致布局失效。

css樣式height: vh和Web組件大小自適應頁面布局存在計算沖突,請檢查height: vh是否是由body節點而內的第一個高度css樣式。如以下結構,id為2的dom節點高度將為0,導致白屏。



 子dom
子dom

解決此白屏問題的參考方案如下:

子dom使用具體高度樣式撐開父元素。



 
子dom

父元素使用實際高度樣式。



 子dom
 子dom

處理H5代碼兼容性

兼容性問題處理不當也會導致頁面白屏。

特殊協議攔截。

若H5頁面調用tel:、mailto:等協議導致白屏,需通過onInterceptRequest攔截并調用系統撥號能力:

.onInterceptRequest((event) =>{
 if(event.request.url.startsWith('tel:')) {
   // 調用系統撥號能力
    call.makeCall({phoneNumber:'123456'});
   return{responseCode:404};// 阻止默認行為
  }
 returnnull; 
})

監控內存與生命周期

內存達到閾值會導致渲染進程被終止,從而引發白屏現象;同樣,渲染進程創建失敗或非正常銷毀也會導致白屏。可從日志中排查原因。檢查Web組件是否與WebController正確綁定,或是否因過早釋放導致白屏。關注日志中與Render進程相關的信息:是否存在內存泄漏使渲染內存不足。關鍵字“MEMORY_PRESSURE_LEVEL_CRITICAL”表明內存已達到閾值,此情形下Web可能遭遇黑屏、花屏或閃屏等異常狀況,需排查是否存在內存泄漏問題。Render進程是否成功啟動或異常退出。

下面列舉一些日志中的關鍵字和對應的情況說明:

d174f4cc-7d9c-11f0-a18e-92fbcf53809c.png

下面說明一下Web組件網絡加載過程中的關鍵日志,正常情況下一個Web組件的加載過程應該包含這些關鍵節點:

d1908f98-7d9c-11f0-a18e-92fbcf53809c.png

d19f1d74-7d9c-11f0-a18e-92fbcf53809c.png


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1304

    瀏覽量

    74446
  • 網絡
    +關注

    關注

    14

    文章

    8264

    瀏覽量

    94691
  • 開發者
    +關注

    關注

    1

    文章

    771

    瀏覽量

    18008

原文標題:Web白屏問題定位與解決指南

文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    鴻蒙OpenHarmony:【常見編譯問題和解決方法

    常見編譯問題和解決方法
    的頭像 發表于 05-11 16:09 ?5648次閱讀

    屏幕白屏解決方法

    我的屏幕開始可以正常顯示,但是在加入一個測方波的頻率程序以后在刷新了幾次以后就會白屏,請問各位這是什么原因?有什么解決方案?
    發表于 08-06 14:48

    貼片機送料器系統的故障表現和解決方法

    料器,在機器運行時進行這項工作是被嚴格禁止的,需按下列步驟進行。  ①按下Cycle Stop開關,等待機器停止;  ②拔下或安裝送料器;  ③松開Cycle Stop按鈕;  ④按下Start按鍵繼續生產。  (2)常見的送料器故障表現和解決方法  如表2所示。  表2
    發表于 09-07 16:33

    使用WebView組件實現應用與Web頁面間的通信

    組件為例,從WebView組件構建、Web頁面加載、應用與WebView中Web頁面間的交互三個方面出發,讓您快速了解WebView組件的基本能力及使用
    發表于 08-26 10:39

    web頁面與C代碼的數據交換方法是什么

    有什么情況可以保證網頁內容不被改變呢?web頁面與C代碼的數據交換方法是什么?
    發表于 02-22 08:04

    HarmonyOS—使用Web組件加載頁面

    ??loadUrl()??接口變更當前Web組件的頁面。 在下面的示例中展示加載本地頁面文件的方法: ● 將資源文件放置在應用的resources/rawfile目錄下。**圖1 **
    發表于 08-31 17:51

    BIOS錯誤信息和解決方法

    BIOS錯誤信息和解決方法 1.CMOS battery failed(CMOS電池失效) 原因:說明CMOS電池的電力已經不
    發表于 03-10 11:49 ?4750次閱讀

    光繪膠卷一些常見的沖洗問題和解決方法(圖解法)

    光繪膠卷一些常見的沖洗問題和解決方法(圖解法)
    發表于 03-15 10:25 ?1873次閱讀

    采用MATLAB對SPWM進行輔助設計與詳細分析和解決方法

    采用MATLAB對SPWM進行輔助設計與詳細分析和解決方法
    發表于 09-14 14:22 ?18次下載
    采用MATLAB對SPWM進行輔助設計與詳細分析<b class='flag-5'>和解決方法</b>

    一文解讀MES系統中選型困惑和解決方法

    本文主要介紹了MES系統中選型困惑和解決方法
    發表于 06-26 08:00 ?1次下載

    保護死區的概念和解決方法

    保護死區的概念和解決方法
    的頭像 發表于 07-15 11:02 ?2740次閱讀
    保護死區的概念<b class='flag-5'>和解決方法</b>

    變頻器過熱的故障原因和解決方法

    變頻器過熱的故障原因和解決方法
    的頭像 發表于 10-24 10:09 ?1w次閱讀

    GSM系統中干擾問題的分類、定位和解決方法

    電子發燒友網站提供《GSM系統中干擾問題的分類、定位和解決方法.pdf》資料免費下載
    發表于 11-17 16:53 ?0次下載
    GSM系統中干擾問題的分類、定位<b class='flag-5'>和解決方法</b>

    HarmonyOS Web頁面加載的原理和優化方法

    在移動互聯網時代,應用的頁面渲染速度對于用戶體驗至關重要。相對于原生頁面Web頁面的性能存在多方面的技術挑戰。本文以HarmonyOS的ArkWeb組件為基礎,介紹了
    的頭像 發表于 12-05 15:14 ?1858次閱讀
    HarmonyOS <b class='flag-5'>Web</b><b class='flag-5'>頁面</b>加載的原理和優化<b class='flag-5'>方法</b>

    Keithley吉時利6511常見故障排查解決方法

    Keithley吉時利6511作為一款精密測量儀器,在長期使用中可能會遇到各種故障。以下是該設備常見故障的排查思路及解決方法,幫助用戶快速定位問題并恢復設備正常運行。 ? ? 一、常見故障及排查
    的頭像 發表于 11-21 18:47 ?899次閱讀
    Keithley吉時利6511常見故障<b class='flag-5'>排查</b>及<b class='flag-5'>解決方法</b>