React Native 真机断点调试+跨域资源加载出错问题的解决方法

React Native 真机断点调试+跨域资源加载出错问题的解决方法

下面,边肖给大家分享一个React原生真机断点调试跨域资源加载错误的解决方案。有很好的参考价值,希望对你有帮助。来和边肖一起看看吧。

写在前面

由于无事可做,我只能在原地打转。相比之前,开发体验好了很多。但是在真机断点调试中遇到了跨域资源加载错误的问题。经过一番摸索,终于解决了。目测是RN新版本调试服务的bug。

应该有很多同学遇到过类似的问题。这里有一张唱片。如果有需要,可以参考一下。

如何断点调试

首先,在真实的机器上加载并运行RN应用程序(过程省略)。

然后,晃动手机,弹出开发菜单,选择“远程调试JS”。

Chrome会在http://localhost:8081/debugger-ui/自动打开调试界面。打开控制台,找到要调试的文件,添加一个断点,然后完成。

问题:跨域资源加载出错

理想情况下,完成上述步骤后,您就可以愉快地进行断点调试了。然而,实际情况并非如此顺利。按照官方指引修改主机后,问题依然存在。

你在控制台看到的错误信息如图,加载跨域资源出错。192.168.3.126是本地内网的ip,而错误资源的域名是192.168.3.126.xip.io

在对RN没有深入了解的情况下,我想到两个思路,后面会详细介绍。

让加载错误的资源变得和调试页面一样。

让调试服务支持资源跨域加载。

解决方法一:替换主机名

用192.168.3.126.xip.io替换localhost,也就是我们通过http://192.168.3.126.xip.io:8081/debugger-ui/.访问调试界面

调试界面正常访问,资源正常加载,完成。

主机名192.168.3.126.xip.io看起来有点奇怪,后面会进一步介绍背后的原理。

解决方法二:CORS

在github问题《CORS issue with JS Remote Debugging when using xip.io》中,一些开发人员报告了同样的错误。

他是这样解决的:

找到node_modules/metro模块,修改Server/index.js、index.js.flow文件,将以下代码添加到_processDeltaRequest方法中。

mres . set header( Access-Control-Allow-Origin , * );

不推荐这种方法,但如果你急着调试,不妨试试。

192.168.3.126.xip.io是什么东东

看到这个主机名,很多同学可能会一脸不解。看似不存在的主机名如何访问成功?

在控制台下Ping它,它返回的ip是192.168.3.126。

其实很简单。xip.io是一个特殊的域名。当你查询域名xxx.xip.io对应的ip地址时,会直接返回xxx。

比如作者笔记本的内网ip地址是192.168.3.126。当我访问192.168.3.126.xip.io时,DNS查询返回的ip地址是192.168.3.126。

它的原理也很简单。xip.io的持有者在公网上建立了自己的DNS解析服务。当用户发起xxx.xip.io的DNS查询时,会直接返回xxx。

写在后面

事实上,上面提到的跨域解决方案都不尽如人意。如果有更好的解决方法,请告诉作者。谢谢你。

参考链接

http://xip.io/

使用xip.io时JS远程调试的CORS问题

使用Chrome开发工具在设备上调试

以上React原生真机断点调试跨域资源加载错误问题的解决方法,就是边肖分享的全部内容。希望给大家一个参考,多多支持我们。

React Native 真机断点调试+跨域资源加载出错问题的解决方法