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 相关文章推荐
超强的IE背景图片闪烁(抖动)的解决办法
Sep 09 Javascript
cnblogs TagCloud基于jquery的实现代码
Jun 11 Javascript
JQuery中each()的使用方法说明
Aug 19 Javascript
jQuery双向列表选择器DIV模拟版
Nov 01 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
mongoose中利用populate处理嵌套的方法
May 26 Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 Javascript
vue中通过使用$attrs实现组件之间的数据传递功能
Sep 01 Javascript
layui扩展上传组件模拟进度条的方法
Sep 23 Javascript
浅谈vue3中effect与computed的亲密关系
Oct 10 Javascript
Vue包大小优化的实现(从1.72M到94K)
Feb 18 Vue.js
Javascript使用integrity属性进行安全验证
Nov 07 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
2006/12/14 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
PHP_Cooikes不同页面无法传递的解决方法
2014/03/07 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
js控制CSS样式属性语法对照表
2012/12/11 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
EasyUI闪屏EasyUI页面加载提示(原理+代码+效果图)
2016/02/21 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
canvas时钟效果
2017/02/16 Javascript
在vue项目中使用Nprogress.js进度条的方法
2018/01/31 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
JavaScript本地储存:localStorage、sessionStorage、cookie的使用
2020/10/13 Javascript
pyhanlp安装介绍和简单应用
2019/02/22 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
JAVA和C++区别都有哪些
2015/03/30 面试题
敬老文明号事迹材料
2014/01/16 职场文书
运动会解说词100字
2014/01/31 职场文书
团队经理竞聘书
2014/03/31 职场文书
技术合作协议书范本
2014/04/18 职场文书
酒后驾车标语
2014/06/30 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
借条格式范本
2015/05/25 职场文书
工作证明格式范文
2015/06/15 职场文书
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby