Closed OldKing-lion closed 11 months ago
当我服务器开启waf的时候,会自动生成一个注入的脚本,类似/_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=7&cb=414815996,这个时候qiankun js加载的时候会报个错误,e.startsWith is not a function 好像是和上面那个脚本有关系,ctr+f5后正常,请问怎么解决这个问题
Hello @OldKing-lion. In order to facilitate location and troubleshooting, we need you to provide a realistic example. Please forking these link codesandbox or clone qiankun examples to your GitHub repository.
你好 @OldKing-lion, 为了方便定位和排查问题,我们需要你提供一个重现实例,请提供一个尽可能精简的链接 codesandbox 或直接 clone qiankun examples,并上传到你的 GitHub 仓库。
Hello @OldKing-lion. In order to facilitate location and troubleshooting, we need you to provide a realistic example. Please forking these link codesandbox or clone qiankun examples to your GitHub repository.
你好 @OldKing-lion, 为了方便定位和排查问题,我们需要你提供一个重现实例,请提供一个尽可能精简的链接 codesandbox 或直接 clone qiankun examples,并上传到你的 GitHub 仓库。
提供不了。因为只有开启了waf的服务器才会有这个问题。开发环境和不开启WAF的环境是没有这个问题的。不过你可以看下我最开始发的那张图,那是我断点定位到的代码。
只有一个截图没办法判断是什么原因导致的,可以本地起个 node 模拟一下 waf 的行为
只有一个截图没办法判断是什么原因导致的,可以本地起个 node 模拟一下 waf 的行为
我发现我这个js是标记了async的,为什么没有被正确处理? 我使用的版本:
@kuitos 帮忙看下
确保都装的最新版本,只有截图没有复现的话只能靠猜了😑
确保都装的最新版本,只有截图没有复现的话只能靠猜了😑
最新版也不行。在加载子应用的时候就报错. excludeAssetFilter都没执行. 看了import-html-entry的代码,也确实有判断async标记的脚本。我现在在想怎么不让waf插入的脚本应该qiankun的加载
qiankun 跟 import-html-entry 实际安装的什么版本,发出来看看
知道为什么了,问题在import-html-entry这个包里。 首先是_getExternalScripts方法:这个方法的return里,判断scripts里的元素是不是string,是string,返回string,不是string,组装对象返回,代码如下:
然后在调用的时候,用到getExecutableScript方法,该方法里有个判断是不是内联脚本的isInlineCode方法:如下图,如果_getExternalScripts返回的内容是对象,isInlineCode方法的参数也是对象,那code.startsWith肯定会报错,因为startsWith是string对象的方法。
大佬@kuitos 您看下我分析的是否有问题,如果没有问题,您能否打个patch?
我是没有复现,因为我比较菜,你们的examples我没跑起来,我也不会用nodejs模仿waf的行为。但是我经过调试和翻阅import-html-entry的包,发现了这个问题。你们可以验证一下。这个解决了,也是对框架的一个完善。
qiankun 跟 import-html-entry 实际安装的什么版本,发出来看看
现在qiankun是v2.10.14 import-html-entry是v1.15.1
_getExternalScripts
这里应该不是根因,这个只是 async 标识,后面对 async 标识会有不同的处理
_getExternalScripts
这里应该不是根因,这个只是 async 标识,后面对 async 标识会有不同的处理
我调试了线上的代码,抛出异常的地方就是isInlineCode方法
或者你可以把调用栈给截图放出来...
调试代码执行顺序:@bravepg
_getExternalScripts
这里应该不是根因,这个只是 async 标识,后面对 async 标识会有不同的处理
你这段代码我有看到,但是是在getExecutableScript这个方法后面,还没执行你发的截图这里就报错了
你这个都是作用域变量,不是调用栈。截这个
我其实前面特意截的变量,堆栈信息不太清楚吧
你能看下你的 entry 是个啥么?
你能看下你的 entry 是个啥么? 我代码里的entry是 https://domain/subdomain/index.html 断点调试,这里我晚点看下
因为waf生成的这个东西不是一直都有,如果我浏览器ctrl+f5就没了,也就不会报错了。所以现在我看不到错误了,晚点我要更新一下,更新后第一次加载,就会有这个错误
最终去掉了注入,解决
我也遇到这个问题,是因为 vue-cli 配置了 crossorigin: 'use-credentials',去掉就正常了
Background
目前项目使用的是angular&vue&qiankun,最近线上测试的时候发现页面上打印了一个错误,导致页面无法正确加载ctrl+f5后正常。在我调试代码的时候发现,是_Incapsula_Resource?SWJIYLWA=719d34d31c8e3a6e6fffd425f7e032f3&ns=7&cb=414815996这个东西引起的。请问有办法解决吗,我们是云服务,也没办法不使用这个。
Proposal
希望处理一下代码,在JZ这个方法里判断一下,如果不是字符串,应该e.src.startsWith
Additional context
Add any other context or screenshots about the feature request here.