HarmonyOS 鸿蒙Next WebView 设置 用户代理后(userAgent) js 注入的方法全部失效

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next WebView 设置 用户代理后(userAgent) js 注入的方法全部失效
使用web组件 由网页发起,调用设置用户代理的方法后, jsbridge 之后全部失效. 寻找解决方案,因为这是适配老项目, 想按照这种思路来解决.

this.bridge?.registerHandler(WebViewConstants.setUserAgentFuncName, async (data, callBack) => {
  let params = this.parseParameters(data)
  let userAgent = params["userAgent"] as string
  let originalUserAgent = await this.controller?.runJavaScript("navigator.userAgent") ?? ""
  try {
    if (StrUtil.isNotBlank(userAgent)) {
      if (originalUserAgent.indexOf(userAgent) > -1) {
      } else {
        this.controller?.setCustomUserAgent(userAgent)
        this.controller?.refresh()
        let params: Record<string, string> = { "data": userAgent, }
        callBack(JsResult.success(params))
      }
    } else {
      let defaultUserAgent = "Mozilla/5.0 (Phone; OpenHarmony 5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile"
      let userAgent = StrUtil.isNotBlank(originalUserAgent) ? originalUserAgent : defaultUserAgent
      this.controller?.setCustomUserAgent(userAgent)
      let params: Record<string, string> = { "data": userAgent, }
      callBack(JsResult.success(params))
    }
  } catch (e) {
    callBack(JsResult.error(e.message))
  }
})

更多关于HarmonyOS 鸿蒙Next WebView 设置 用户代理后(userAgent) js 注入的方法全部失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

设置用户代理(userAgent)理想的时机是在任何页面加载或JavaScript执行之前设置用户代理。您可以在onControllerAttached事件中设置用户代理,确保在任何页面加载之前都已设置完毕。

Web({ src: 'www.example.com', controller: this.controller })
    .onControllerAttached(() => {
        console.log("onControllerAttached");
        try {
            let userAgent = this.controller.getUserAgent() + this.customUserAgent;
            this.controller.setCustomUserAgent(userAgent);
        } catch (error) {
            console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
        }
    })

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-webview-V5#setcustomuseragent10

更多关于HarmonyOS 鸿蒙Next WebView 设置 用户代理后(userAgent) js 注入的方法全部失效的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next WebView组件在用户代理(userAgent)被设置后,如果出现JavaScript注入方法全部失效的问题,这通常与WebView的安全策略或userAgent字符串的修改方式有关。

HarmonyOS为了增强应用的安全性,可能会对用户代理字符串的修改进行限制,或者修改后的userAgent影响了WebView对JavaScript的处理。当userAgent被更改后,可能触发了WebView的安全机制,导致JavaScript注入被阻止。

解决这类问题的一种方法是检查userAgent的设置方式,确保它符合HarmonyOS WebView的安全要求。同时,确认注入的JavaScript代码本身没有违反WebView的安全策略。

另外,由于HarmonyOS不断更新其系统安全策略,建议查阅最新的HarmonyOS开发文档,了解关于WebView和userAgent的最新要求和限制。

如果上述方法仍然无法解决问题,可能需要考虑使用其他方式实现功能,或者调整应用的设计以适应HarmonyOS的安全策略。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部