wgtyvgxyusgxu
wgtyvgxyusgxu
  • 发布:2024-03-22 23:49
  • 更新:2024-03-28 11:07
  • 阅读:104

【报Bug】webview的appendJsFile方法会导致webview中的网站的顶层域策略出问题

分类:HTML5+

产品分类: HTML5+

HBuilderX版本号: 3.99

手机系统: Android

手机系统版本号: Android 12

手机厂商: 华为

手机机型: Mate60 Pro

打包方式: 离线

操作步骤:

使用plus.webview.create创建一个目标为https://arco.design/vue/docs/start的url并添加到窗口中,此时在窗口显示之前,执行appendJsFile,例如

let wv = plus.webview.create("https://arco.design/vue/docs/start")  
wv.appendJsFile('_www/static/test.js')  
//此时我们默认我们已经拿到了当前窗口的对象  
currentWebview.append(wv);  
wv.show()

预期结果:

对应网页应当正常加载和渲染

实际结果:

控制台报错,网页无法正常执行自己的js文件并加载,将appendJsFile方法那一行注释掉后可以正常加载。

23:40:20.941 Uncaught SyntaxError: In strict mode code, functions can only be declared at top level or inside a block. at https://lf-cdn-tos.bytescm.com/obj/static/arcodesign/vue/assets/index.8b396f9a.js:2

请注意,通过appendJsFile加载的js无论是否有内容,都会导致这种情况发生,是通过appendJsFile加载了js文件才导致的策略变化

bug描述:

webview的appendJsFile方法会导致webview中的网站的顶层域策略出问题,例如await关键词在函数中不可用。

补充一下,目前观察了好几个类似技术栈的网站,发生这种问题的都是网站自身采用了esm的js语法模式

2024-03-22 23:49 负责人:无 分享
已邀请:
DCloud_UNI_OttoJi

DCloud_UNI_OttoJi - 日常回复 uni-app/x 问题,如果艾特我没看到,请主动私信

感谢反馈,你提到使用 webview 加载 esm 方案的网站,不能加载 注入自定义 js,会导致逻辑报错,我尝试进行复现,有问题会进行更新。

可以提供一个不是 esm 的目标网站,和想要执行的 js 逻辑吗?这种情况是可以正常处理和渲染的吗?

补充:
因为没有提供复现工程,我先建了一个工程 html 5 plus
https://gitcode.net/dcloud/5plus-demo/-/blob/main/plus/webview_embed.html
我运行这个文件,使用 安卓模拟器运行,发现可以正常运行 js 弹窗两次 alert,没有发现你的问题。

请按照我提供的工程文件,具体指出问题如何复现,如何修改
或者提供可以复现的工程

  • wgtyvgxyusgxu (作者)

    不是esm的目标网站目前直接访问 google.com 即可。

    至于想执行的js逻辑,目前测试下来跟本问题无关,因为不管此js文件为空还是包含一个 function test2333(){} 这样的内容,都会引发策略变更导致esm方案的网站发生错误

    2024-03-24 12:21

  • wgtyvgxyusgxu (作者)

    您好,这个问题还在跟进处理吗

    2024-03-27 19:10

  • DCloud_UNI_OttoJi

    回复 wgtyvgxyusgxu: 因为没有提供复现工程,我先建了一个工程 html 5 plus

    https://gitcode.net/dcloud/5plus-demo/-/blob/main/plus/webview_embed.html

    我运行这个文件,使用 安卓模拟器运行,发现可以正常运行 js 弹窗两次 alert,没有发现你的问题。


    请按照我提供的工程文件,具体指出问题如何复现,如何修改。或者提供可以复现的工程。

    2024-03-28 11:07

  • wgtyvgxyusgxu (作者)

    回复 DCloud_UNI_OttoJi: 目前有一个完全可用的复现工程:


    https://github.com/censujiang/uniapp-webview-problem


    目前可以确认此Bug不是我所引用的库的问题,是html5plus本身框架问题,您也可以在最新html5plus框架上运行(我的框架版本是3.98)

    2024-03-28 15:07

要回复问题请先登录注册