HarmonyOS鸿蒙Next中web组件的onOverrideUrlLoading与android中webview的shouldOverrideUrlLoading返回内容不同

HarmonyOS鸿蒙Next中web组件的onOverrideUrlLoading与android中webview的shouldOverrideUrlLoading返回内容不同 比如加载一个简单的 http://www.baidu.com

android中设置如下

WebSettings webSettings = currentWebView.getSettings();
webSettings.setSupportZoom(true); // zoomAccess
webSettings.setBuiltInZoomControls(true);
webSettings.setLoadWithOverviewMode(true); // overviewModeAccess
webSettings.setUseWideViewPort(true); // wideViewModeAccess
webSettings.setLoadsImagesAutomatically(true); // imageAccess
webSettings.setJavaScriptEnabled(false); // javaScriptAccess
webSettings.setDatabaseEnabled(false); // databaseAccess
webSettings.setJavaScriptCanOpenWindowsAutomatically(false); //allowWindowOpenMethod
webSettings.setSupportMultipleWindows(false); // multiWindowAccess
webSettings.setAllowFileAccess(false); // fileAccess
webSettings.setDomStorageEnabled(false); // domStorageAccess
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSettings.setAllowUniversalAccessFromFileURLs(false);
currentWebView.setBackgroundColor(Color.WHITE);
currentWebView.setClipToPadding(true);

鸿蒙中设置如下,尽量保证设置一致

Web({ src: '', controller: this.webviewController })
  .zoomAccess(true)
  .overviewModeAccess(true)
  .metaViewport(true)
  .imageAccess(true)
  .javaScriptAccess(false)
  .databaseAccess(false)
  .allowWindowOpenMethod(false)
  .multiWindowAccess(false)
  .fileAccess(false)
  .domStorageAccess(false)
  .cacheMode(CacheMode.None)
  .onOverrideUrlLoading((webResourceRequest) => {
    console.log("[HTTPWebBrowsingTest] onOverrideUrlLoading " + webResourceRequest.getRequestUrl())
    this.webviewController.loadUrl(webResourceRequest.getRequestUrl())
    return true;
  })

可以看到android中shouldOverrideUrlLoading函数回调了三次,地址分别是

  1. https://m.baidu.com/?from=844b&vit=fps

  2. [http://m.baidu.com/?baiduid=138DF16BE7C4EA3E552B5544D9899D55&cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fps?cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fpsbd_page_type=1&from=844b&logid=16940264344259465100&ssid=0&pu=sz@1321_480&t_noscript=jump](http://m.baidu.com/?baiduid=138DF16BE7C4EA3E552B5544D9899D55&cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fps?cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fpsbd_page_type=1&from=844b&logid=16940264344259465100&ssid=0&pu=sz@1321_480&t_noscript=jump)

  3. [https://m.baidu.com/?baiduid=138DF16BE7C4EA3E552B5544D9899D55&cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fps?cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fpsbd_page_type=1&from=844b&logid=16940264344259465100&ssid=0&pu=sz@1321_480&t_noscript=jump](https://m.baidu.com/?baiduid=138DF16BE7C4EA3E552B5544D9899D55&cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fps?cip6=240e:457:ff01:80a3:14c0:c101:7c78:f447&from=844b&vit=fpsbd_page_type=1&from=844b&logid=16940264344259465100&ssid=0&pu=sz@1321_480&t_noscript=jump)

但鸿蒙中的onOverrideUrlLoading函数只回调了一次 地址是android的第二个地址。

[http://m.baidu.com/?baiduid=DC8571BB54C8502BDF31E0CA0E8FD514&cip6=240e:457:ff01:80a3:53ff:ad78:4df4:ff87&from=844b&vit=fps?cip6=240e:457:ff01:80a3:53ff:ad78:4df4:ff87&from=844b&vit=fpsbd_page_type=1&from=844b&logid=6501297946642667726&ssid=0&pu=sz@1321_480&t_noscript=jump](http://m.baidu.com/?baiduid=DC8571BB54C8502BDF31E0CA0E8FD514&cip6=240e:457:ff01:80a3:53ff:ad78:4df4:ff87&from=844b&vit=fps?cip6=240e:457:ff01:80a3:53ff:ad78:4df4:ff87&from=844b&vit=fpsbd_page_type=1&from=844b&logid=6501297946642667726&ssid=0&pu=sz@1321_480&t_noscript=jump)

这是为什么,是我设置问题吗,如何设置可以让鸿蒙得到和android一样的回调结果。或者鸿蒙底层做了什么优化,导致返回结果和android不同。


更多关于HarmonyOS鸿蒙Next中web组件的onOverrideUrlLoading与android中webview的shouldOverrideUrlLoading返回内容不同的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

你好,内部处理中,有结论这边会立马回复,请耐心等待一下。

更多关于HarmonyOS鸿蒙Next中web组件的onOverrideUrlLoading与android中webview的shouldOverrideUrlLoading返回内容不同的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


好的
感谢,

在HarmonyOS鸿蒙Next中,Web组件的onOverrideUrlLoading方法与Android中WebViewshouldOverrideUrlLoading方法在返回内容上存在差异。onOverrideUrlLoading方法返回一个布尔值,用于指示是否拦截并处理URL加载请求。如果返回true,表示拦截并处理该URL,系统将不会继续加载该URL;如果返回false,表示不拦截,系统将继续加载该URL。相比之下,shouldOverrideUrlLoading方法在Android中也返回布尔值,但其逻辑与鸿蒙Next中的onOverrideUrlLoading方法相同。两者的主要区别在于鸿蒙Next中的onOverrideUrlLoading方法更注重与鸿蒙生态的集成和适配,可能在处理某些特定URL时会有不同的行为。

在HarmonyOS鸿蒙Next中,web组件的onOverrideUrlLoading方法与Android中WebViewshouldOverrideUrlLoading方法在功能上类似,都是用于拦截URL加载事件。然而,它们的返回值和行为有所不同:

  1. 返回值:

    • 在Android中,shouldOverrideUrlLoading返回一个boolean值:true表示拦截URL并自行处理,false表示继续由WebView加载。
    • 在HarmonyOS鸿蒙Next中,onOverrideUrlLoading返回一个boolean值:true表示拦截URL并自行处理,false表示继续由web组件加载。
  2. 行为:

    • Android的shouldOverrideUrlLoading通常用于处理特定URL的跳转逻辑。
    • HarmonyOS的onOverrideUrlLoading也用于类似目的,但其实现和调用方式可能与Android有所不同,具体取决于鸿蒙系统的设计和API实现。

总结来说,两者的核心功能相似,但在具体实现和返回值处理上可能存在细微差异,开发者需根据各自平台的文档进行适配。

回到顶部