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


Posted in Javascript onJanuary 18, 2018

写在前面

闲来无事,折腾了一下React Native,相比之前,开发体验好了不少。但在真机断点调试那里遇到了跨域资源加载出错的问题,一番探索总算解决,目测是RN新版本调试服务的bug。

遇到类似问题的同学应该不少,这里做下记录,有需要的可以参考下。

如何断点调试

首先,在真机上加载运行RN应用(过程略)。

然后,摇动手机,弹出开发菜单,选择“Debug JS Remotely”。

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

chrome会自动打开调试界面,地址是 http://localhost:8081/debugger-ui/ 。打开控制台,找到想要调试的文件,加断点,搞定。

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

问题:跨域资源加载出错

理想情况下,上述步骤后,就可以愉快地断点调试了。但实际情况并没有这么顺利,按照 官方指引 修改了host后,问题依然存在。

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

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

在未对RN有深入了解的情况下,想到两种思路,后文会分别讲述细节。

让加载出错的资源,跟调试页面变成同源的

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

解决方法一:替换主机名

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

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

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

192.168.3.126.xip.io 这个主机名看着有点奇怪,后文会进一步介绍背后的原理。

解决方法二:CORS

在github issue《CORS issue with JS Remote Debugging when using xip.io》里,有开发者反馈了同样的错误。

他是这样解决的:

找到node_modules/metro模块,修改Server/index.js、index.js.flow文件,在_processDeltaRequest方法里加上下面代码。

mres.setHeader("Access-Control-Allow-Origin", "*");

这个方法不推荐,不过如果急着调试的话也不妨试下。

192.168.3.126.xip.io是什么东东

看到这个主机名不少同学可能一脸懵逼,一个似乎不存在的主机名怎么可以访问成功。

在控制台下ping了一下返回的是 192.168.3.126 这个ip。

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

其实很简单,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/

CORS issue with JS Remote Debugging when using xip.io

Debugging on a device with Chrome Developer Tools

以上这篇React Native 真机断点调试+跨域资源加载出错问题的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript attachEvent和addEventListener使用方法
Mar 19 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 Javascript
jQuery实现6位数字密码输入框
Dec 29 Javascript
详解本地Node.js服务器作为api服务器的解决办法
Feb 28 Javascript
在nginx上部署vue项目(history模式)的方法
Dec 28 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
Feb 07 Javascript
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
JavaScript实现预览本地上传图片功能完整示例
Mar 08 Javascript
零基础之Node.js搭建API服务器的详解
Mar 08 Javascript
如何使用JavaScript检测空闲的浏览器选项卡
May 28 Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
Aug 03 Javascript
ajax请求data遇到的问题分析
Jan 18 #Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 #Javascript
vue-scroller记录滚动位置的示例代码
Jan 17 #Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
Jan 17 #Javascript
详解微信小程序审核不通过的解决方法
Jan 17 #Javascript
swiper动态改变滑动内容的实现方法
Jan 17 #Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
Jan 17 #Javascript
You might like
聊天室php&mysql(三)
2006/10/09 PHP
php discuz 主题表和回帖表的设计
2009/03/13 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP接口继承及接口多继承原理与实现方法详解
2017/10/18 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
通过PHP实现获取访问用户IP
2020/05/09 PHP
代码生成器 document.write()
2007/04/15 Javascript
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
JS网页图片按比例自适应缩放实现方法
2014/01/15 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
微信小程序 wxapp视图容器 view详解
2016/10/31 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
2016/12/07 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
详解react-router 4.0 下服务器如何配合BrowserRouter
2017/12/29 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
vue点击当前路由高亮小案例
2019/09/26 Javascript
openlayers实现图标拖动获取坐标
2020/09/25 Javascript
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
python实现FTP服务器服务的方法
2017/04/11 Python
分析Python中解析构建数据知识
2018/01/20 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
Python脚本调试工具安装过程
2021/01/11 Python
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
c语言常见笔试题总结
2016/09/05 面试题
电气工程师岗位职责
2014/01/01 职场文书
经营目标管理责任书
2014/07/25 职场文书
就业协议书
2014/09/12 职场文书
2014年底个人工作总结
2015/03/10 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
vue实现可以快进后退的跑马灯组件
2022/04/08 Vue.js