有一个需求,在 ipad 中 safari 和 chrome 浏览器中表现不一致,于是查了很多 ios 相关的调试方式,做此整理。
chorme 开发者工具中切换设备工具
适用情况:检测是否只是小屏幕导致的样式问题,或者 ua 导致的问题
mac 中 safari 开发工具中切换设备工具
原理和以上 chorme 开发者工具类似,但是比 chrome 更接近 ios safari
打开途径: 菜单栏~开发~进入响应式设计模式
菜单栏~开发~用户代理。可以改变对应 ua
mac xcode 模拟器模拟 ios safari 行为
使用 xcode 打开 ios 模拟器,可以使用 mac 本身的 safari 浏览器中的 devtools 来检测 xcode 模拟器的行为。
在线模拟器
没有详细了解,仅仅提供思路。
safari 真机测试(需要 mac)
1、在 ios 设备中打开:设置~safari浏览器~高级~网络检查(web inspector)
2、用 usb 线将 ios 设备和 mac 连接后,可以在 mac 中的 safari 浏览器中:菜单栏~开发~对应设备找到网页链接,打开后可以通过 safari 浏览器提供的开发者工具进行调试。
safari 真机调试 - chrome 开发者工具 (需要 mac)
以上都是使用 safari 提供的开发者工具进行调试,通过 remotedebug-ios-webkit-adapter 适配器可以将 ios 中 safari 浏览器的页面在 mac 中以 chrome 开发者工具进行调试。
不推荐该方式:一方面该适配器已经停止维护,随着版本更新可能无法使用,另一方面 safari 的开发者工具完全对标 chrome 开发者工具,许多功能完成可以通过上一个方式完成调试。
Inspect -- remotedebug-ios-webkit-adapter 的替代者
在 remotedebug-ios-webkit-adapter 官网看到这个工具的推荐,介绍说可以做到没有 mac 的配合下在真机调试,由于没有具体尝试过,这里不做赘述。
Inspect: inspect.dev/
如何调试 ios 设备中的 chrome
以上方法大多使用 safari 浏览器进行调试,但是并没有找到合适的在 ios 设备中调试 chrome 的方法。最后是通过 charles 抓包的方式调试定位到接口问题。
charles 抓包配置教程:www.jianshu.com/p/5539599c7…
遇到的问题及解决:
- ios chrome 中接口的 content-type 为 xls 格式(application/vnd.ms-excel),需要升级为 xlsx 格式(application/vnd.openxmlformats-officedocument.spreadsheetml.sheet)。该问题在 pc 上表现正常,在 ios 的 chrome 和 safari 上均出现错误。
- safari 浏览器对 window.open()方法不兼容,并且做了消音处理,不会有阻止提示(pc 上可以在 url 中看到被拦截,但是移动端上无任何提示),不改动代码情况下,可以直接在 ios 设备中设置中关闭对默认阻止弹出窗口行为。
此处注意:由用户自己触发的动作,如 click 的 handler 中的 window.open()可以正常运行,但是在代码中的 window.open()方法会被 safari 浏览器的安全机制阻止
参考文章 (科学上网)
- css-tricks.com/debugging-i… (常规调试方法)
- betterprogramming.pub/debugging-y… (safari devtools)
- jonsadka.com/blog/how-to… (remotedebug-ios-webkit-adapter 详细使用)
- github.com/RemoteDebug… (remotedebug-ios-webkit-adapter)
- inspect.dev/ (Inspect)
- www.jianshu.com/p/5539599c7… (charles ios 抓包配置)
- juejin.cn/post/684490… (safari window.open)