Safari Web 检查器不断断开连接

Posted

技术标签:

【中文标题】Safari Web 检查器不断断开连接【英文标题】:Safari Web inspector keeps disconnecting 【发布时间】:2015-09-23 23:01:32 【问题描述】:

我在我的 iPad 上安装了 Safari 8.0.6iOS 8.3,同时在我的 Mac (10.10.3) 上通过 Web Inspector 进行调试,连接不断断开(断开时我在“开发”菜单下看不到设备名称),但如果我退出 safari 然后重新启动,则可以恢复,然后我可以再次远程刷新和检查。

【问题讨论】:

这似乎是一个很常见的问题。有人建议更换电缆,但我没有任何运气。当这种情况发生在我身上时,我只需在 iPad 上拔下并重新插入数据线,这比重新启动 Safari 快一点,也不会那么烦人。 @enifeder 感谢您的评论,是的,更换电缆也没有帮助我,我之前想知道是否有一些 javascript 错误会中断连接 经常发生在每个人身上。这是一个 Safari 错误。 看来这个问题已经随着 Safari 9.0 的发布而得到解决。我昨天反复遇到这个问题,但是今天安装 Safari 9.0 后,我在调试我的 cordova 应用程序时没有看到 Safari 断开连接 我在 Safari 10.0 中遇到了这种情况... 【参考方案1】:

有一些事情可以尝试:

1。在 Xcode 模拟器上测试:

在 Xcode 中打开 iPhone 模拟器并使用 Safari Web Inspector 进行调试。

旁注:可能需要下载Safari Technology Preview

2。在您的设备上重置您的位置和隐私设置。

设置 > 常规 > 重置 > 重置位置和隐私

3。在真机上调试

有了这个配置,它现在似乎可以工作了。

iPhone X,ios 版本 12.1.3 macOS Mojave 版本 10.14.2 (18C54) Safari 版本 12.0.2 (14606.3.4)

编辑 2019.08.13

设置 -> Safari -> 高级 -> 检查 Web 信息是否已打开。

突然关闭,我无法通过 Web Inspector 连接。打开后,它工作了。

对于其他设备/版本,请进一步阅读(也许您可以减小构建大小)。


编辑:2018.09.20

@Chet 发现,Web Inspector 因 JS 文件和地图文件过大而不断断开连接

https://***.com/a/52338231/4641479

Github 上的问题:

https://github.com/google/ios-webkit-debug-proxy/issues/275

https://github.com/google/ios-webkit-debug-proxy/issues/274

我可以在具有生产版本(1.8 MB + 2.4 MB 文件)的真实设备上确认这一点,Safari Web Inspector 始终保持连接。

由于开发版本不是:


在我的网络检查器很少工作并且经常只是停止工作之前 - 但仍然处于打开状态。 Safari 更新后,网络检查器会立即打开和关闭。如果遇到这样的问题..

这将起作用:

步骤 1. 获取最新的 Safari 浏览器

Safari:11.1 (12605.1.33.1.2)

https://developer.apple.com/safari/download

macOS Sierra 和 OS X El Capitan(我假设 macOS high Sierra 也受支持)

也许你需要下载Safari Technology Preview


第 2 步。重置您的位置和隐私设置

在您的设备上转到:

设置 > 常规 > 重置 > 重置位置和隐私

来源:https://forums.developer.apple.com/thread/87181


第 3 步。连接您的设备

在 OS X 上打开 Safari 如果您使用 USB 数据线连接了 iPhone 设备,请先将其断开。 现在插入。

在 OS X Safari 上转到:

开发>设备名称>申请开发

现在您的手机上有一个权限问题。选择信任,现在您可以选择设备 safari 上的打开选项卡并进行调试。


调试愉快!

现在网络检查器保持连接状态。

【讨论】:

真的非常感谢你!! 第 2 步。 像魅力一样为我工作 第一次工作,但又遇到同样的问题。 ***.com/a/51224913/694609 Emptying Cache 为我解决了这个问题! OSX Safari 没有“开发者”菜单项 “设置 > 常规 > 重置 > 重置位置和隐私”对我有用!【参考方案2】:

您的 iPhone 上是否有很多后台应用程序正在运行?杀了他们再试一次。

我们在 WWDC 上向 Apple 开发人员展示了这个问题,他们怀疑这是由于 iPhone 的内存限制造成的。果然,杀死我们的大多数后台应用程序为我们解决了这个问题。

【讨论】:

太棒了,我真的不希望这个选项,但它有帮助 因此,接受答案的重置隐私和这个似乎对我有用。但是,这样做很好,而不是重置隐私设置,然后必须不断地被every.single.app 唠叨以允许某些事情。 谢谢!这在 2021 年 8 月对我有用。我以为我需要下载 Safari 的开发者版本。 我只打开了一个应用程序,一个要调试的应用程序。 哇,这行得通!【参考方案3】:

工作解决方案(截至 2020 年 3 月 24 日)

嗯,经过这么多试验并打开了数千篇博客文章以找出解决方案,我设法让它工作,没有一个失败案例。

对我来说,这一直是我的 Ionic+Cordova 应用程序的问题。

当我运行一个简单的 Cordova 或 Ionic 应用程序时,当我看到这个问题(Safari 断开连接)不存在时,我的潜意识开始思考这个问题。然后突然间,我尝试了另一件事,它奏效了。

基本上,当任何文件的大小过大(不确定限制)时,Safari 网络检查器会断开连接。也许,一些图像、一些脚本和 CSS。就我而言,它曾经是因为 JavaScript 及其源映射文件。

所以,当我开始在没有源映射的情况下运行我的 iOS 应用程序时,问题就消失了。为此,我所要做的就是将--source-map=false 传递给我的ionic cordova commands,例如:

ionic cordova run ios --source-map=false
ionic cordova run ios -lc --source-map=false

我写了一篇关于这个的小文章详细阐述这个https://medium.com/wizpanda/a-small-tip-to-speed-up-development-with-angular-or-ionic-d5764f639c0c

原答案

这里列出的大多数答案对我有用了一段时间,但几个小时后它们也停止了工作,我的 Safari Web 控制台在打开时再次断开连接。

其他几个对我有用的选项:

选项 1 - 从 Safari 清空缓存

Safari on MacOS -> Develop -> Empty Cache

选项 2 - 清除受信任的计算机

On iOS Device -> Settings -> Developer -> Clear Trusted Computers然后重新连接USB线,然后再次尝试调试

选项 3 - 让调试器成为傻瓜(截至 2019 年 1 月 14 日)

这个解决方案已经运行了很长时间。由于这是一个与 iOS 和 Mac 之间的连接相关的问题,所以我打开了我的 Console 应用程序,只选择了我的 iPhone。 (这以某种方式让我的 iOS 设备连接到我的 Mac)

然后在 Safari 上打开开发人员的控制台对我来说很好,无需断开连接。

选项 4 - 通过 Xcode 运行

这也是一种解决方法,也是一种查看其功能的技巧。您基本上可以通过ionic cordova prepare ios 准备您的 iOS 应用程序,然后使用 Xcode 运行该应用程序并将其部署到您的 iPhone。

至少,我能够看到控制台日志,有时,它甚至可以与 Safari 网络检查器一起使用。

选项 5 - 在 iPhone 模拟器上运行

我认为这是最有效的解决方案。当您的系统没有运行太多应用程序时,此选项适用,因为启动模拟器会占用大量系统资源。

基本上,不是在真实设备上运行您的应用,而是通过 Xcode 在 iPhone 模拟器中运行您的应用,并在 Safari 网络检查器中正常调试它,不会出现此问题。

这可能是因为传输到 Safari 检查器的文件来自系统本身。

【讨论】:

清空缓存也为我修复了它。 到目前为止,第三个选项对我来说似乎是最可靠的。 保证第三个。控制台在您的 macOS 上可用,请使用聚光灯。 第二个选项立即适用于我的两个设备(5s 和 Xs)。 选项 3 对我来说似乎是救命稻草 - 即使拥有更大的源地图也能连接起来的想法是首先连接到设备上的任何小应用程序,然后才切换到另一个应用程序/标签页设备。谢谢!【参考方案4】:

听起来很奇怪,但可能是由于电池已满触发断开连接:https://forums.developer.apple.com/thread/92290

Iphone 的电池充满时似乎会发生断开连接。 (所以目前我们在检查时打开闪光灯和相机以杀死电池......)

【讨论】:

这可能就是你来这篇 SO 帖子的原因。上面的答案对我有帮助。 我以为这是我的罪魁祸首,但事实并非如此。所以要注意这可能不是问题。【参考方案5】:

这仅对物理设备是必需的。如果设备的电池已满,则 Safari 可以强制断开物理设备的连接。 (“充满电?好吧,让我们断开你的连接,因为你不再需要充电了——你的调试会话也开始了......”)

您需要在Develop > [device] 中选择通过网络连接,然后将调试器附加到您要调试的页面。如果您在 Safari 中没有开发菜单,请转到Safari > Preferences > Advanced 并选择在菜单栏中显示开发菜单

如果这不起作用,您可以先尝试通过 App Store 升级您的 OS/Safari。

如果事情仍然出现问题,请断开您的 iOS 设备。进入您的 iOS 设备,进入 Settings > Safari > Web Inspector,然后将其关闭然后重新打开。强制退出 Safari。重新插入您的 iOS 设备并再次启动 Safari,然后通过 Safari > 开发菜单重新连接您的 iOS 设备。

【讨论】:

通过网络为我工作。在 Safari v11.1.2 iOS 11.4.1 上。没有网络选项,它立即崩溃。谢谢!【参考方案6】:

首先关闭 XCode 对我有帮助。

【讨论】:

【参考方案7】:

这一直困扰着我很长一段时间的行为非常不一致,这里有一些我发现有帮助的东西,我还在here上写了一篇博文。

    同时更新 mac safari 和 ios - 我发现在两个版本中的最新版本开始为我工作后,Safari 之间可能存在调试不兼容问题。

    检查 ios 中的 web 检查器是否已启用 - 已知升级后可以关闭此设置,请检查设置 > safari > 高级 > web 检查器。

    检查您连接的端口 - 我已将我的端口插入便宜的集线器/通过苹果键盘/显示器集线器,发现直接进入 mac 效果更好。

    您使用的是优质电缆吗? - 我发现没有磨损的质量更好/官方电缆在调试时具有更好的可靠性。

    其他值得注意的观察 - 其他人评论说,确保在 safari 中启用 cookie、启用私有模式并在 Xcode 打开时尝试影响了它的可靠性,尽管我自己没有看到这可能会有所帮助其他人可以尝试。

【讨论】:

【参考方案8】:

我不能说我有一个解决方案,但我是朝着正确方向迈出的一步。

我尝试使用ios-webkit-debug-proxy,这样我就可以使用 Chrome 开发工具而不是 Safari 开发工具。

注意,为了让它工作,我可以将我的 iOS 升级到最新的 11.4.1 和 MacOS 10.13.65,然后重新安装最新版本:

brew update
brew install ios-webkit-debug-proxy
brew reinstall --HEAD libimobiledevice
brew reinstall -s ios-webkit-debug-proxy

ios_webkit_debug_proxy

在运行ios_webkit_debug_proxy 后,我可以尝试通过chrome://inspect 连接,但它立即再次断开连接:

Listing devices on :9221
Connected :9222 to Chet's Phone (6a028994cf281be807bf80c5557c3f2eb3fbb8b0)
Invalid packet header 0x1ffffff91ffffffa0ffffff9d == .... == 26321053
Disconnected :9222 from Chet's Phone (6a028994cf281be807bf80c5557c3f2eb3fbb8b0)

但是,我们有一个线索! Invalid packet header。听起来像是某个地方的较低级别的错误。不知道在哪里提交,但尽管......

【讨论】:

坐下来用控制台应用追踪这个错误,也有了一些新的见解,我会更新我上面的帖子 我能够为ios-webkit-debug-proxy 创建一个复制品,它似乎与这个问题有关,因为该复制品与 Safari Web Inspector 问题一致。使用源映射未缩小时,javascript 源大小似乎是一个问题。 你是对的!谢谢!使用 angular 的 AOT 编译器进行生产构建,main.js 的大小为 1.8 MB,vendor.js 的大小为 2.4 MB,没有源映射文件,它始终工作,连接和不连接 Xcode。不过,我仍然想调试我的开发版本。 是的,我也是。我正在处理 39MB 未缩小的 js 文件? 我可以确认删除源地图为我解决了这个问题。【参考方案9】:

神奇的解决方案对我有用:

    重启你的 MAC 重启你的 iPhone

【讨论】:

重启 iphone 至少可以工作一段时间【参考方案10】:

09-07-2020

Safari (13.1.1) 上的最新 MacO (Catalina 10.15.5) 上仍然存在此问题

离子/电容器解决方案:

ionic cap run ios -l --external --source-map=false

【讨论】:

【参考方案11】:

最近的 Safari 技术预览似乎为我解决了这个问题。

https://developer.apple.com/safari/technology-preview/

【讨论】:

Safari Technology Release 42 (Safari 11.1, WebKit 12605.1.10)开始好像问题解决了 没有改变任何东西:( 现在检查器打开.. 在一秒钟内(有时或多或少)它现在关闭,而不是打开,只是没有像以前那样发生。它现在仍然关闭,无法弄清楚为什么。 Safari 桌面版 11.1 (12605.1.33.1.2) => Sierra 我遇到了同样的问题。 Safari 技术预览没有帮助 Safari Technology Release Release 70(Safari 12.1,WebKit 14607.1.13)仍然存在这个问题,所以我认为这个答案无效!【参考方案12】:

MacOS Mojave / Catalina 解决方案

对我来说,这个问题是在我升级到新的 macOS Mojave 后立即开始的,上面可能已经提到过,但对我来说,我只需要下载为 Mojave 构建的新“Safari 技术预览”应用程序。

Safari 下载页面

https://developer.apple.com/safari/download/

Mojave 直接下载

https://secure-appldnld.apple.com/STP/041-71285-20190604-6d0dcb17-07e5-40a0-b418-dba732cefe64/SafariTechnologyPreview.dmg

【讨论】:

【参考方案13】:

对我来说,使用不同的适配器和电缆解决了这个问题。 每次连接时,它都会询问“信任此设备”,如智能手机上的提示,如果没有,则说明电缆/适配器问题。

【讨论】:

【参考方案14】:

在您的 iOS 设备上使用内容拦截器(例如 1Blocker)时,请确保对您要调试的域禁用它。

禁用 1Blocker 会阻止 Web Inspector (Mac) 在打开后立即关闭,并让我重新开始工作。

【讨论】:

【参考方案15】:

我知道已经有很多答案了,但我想发布,因为现在没有一个对我有用。但是,我的手机电池处于“低电量模式”……但由于我正在为开发而插电,我认为这没什么大不了的。但是,进入手机设置并关闭低电量模式解决了我的问题。现在 safari 不会断开连接。

只是想发布一下,以防有人遇到电池电量不足的情况。

【讨论】:

【参考方案16】:

离子应用的工作解决方案:

ionic cordova build ios --source-map=false

【讨论】:

【参考方案17】:

电容器,离子,Cordova

rm -rf platforms/ios/**/*.map

【讨论】:

以上是关于Safari Web 检查器不断断开连接的主要内容,如果未能解决你的问题,请参考以下文章

Web 套接字在反应应用程序中不断断开连接。后端是 Nestjs

WebSocket 在几个时间间隔之间不断断开连接

Oracle数据库,PLSQLsession几分钟不用就自动断开,自己也没设置超时自动断开啊,怎么让它不断呢?

Spring boot和hibernate mysql数据库连接不断断开

断开客户端与服务器端信号器的连接

websocket不断断开连接