Safari Web检查器不断断开连接

88

我在iPad上使用iOS 8.3Safari 8.0.6,通过Web Inspector在我的Mac(10.10.3)上进行调试时,连接不断中断(在断开连接后,在“开发”菜单下看不到设备名称),但如果我退出Safari并重新启动它,然后我能够刷新并再次远程检查。


1
这似乎是一个非常普遍的问题。有些人建议更换电缆,但我尝试过这个方法并没有成功。当这种情况发生时,我只是在 iPad 上拔下电缆并重新插入,这比重启 Safari 更快,稍微不那么烦人。 - enifeder
1
@enifeder 感谢您的评论,是的更换电缆也没有帮助我,我之前在想是否有一些 JavaScript 错误导致连接中断。 - user2727195
4
经常发生。这是Safari浏览器的一个bug。 - Kirill E.
3
看起来这个问题已经在 Safari 9.0 发布后得到解决。昨天我一直遇到这个问题,但是今天安装了 Safari 9.0 后,在调试我的 Cordova 应用时就没有再出现 Safari 断开连接的情况了。 - jandersen
3
我正在使用 Safari 10.0,遇到了这个问题... - shi11i
显示剩余2条评论
18个回答

75

有几个尝试的方法:

1. 在Xcode模拟器上测试:

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

附注:也许您需要下载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检查器连接。切换它后,它可以工作。

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


编辑:2018.09.20

@Chet发现,Web检查器因太大的JS文件和映射文件而不断断开连接

https://dev59.com/9l0Z5IYBdhLWcg3wnBb_#52338231

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 网页检查器总是保持连接。

enter image description here

但对于开发构建则不然:

enter image description here


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

请参考以下步骤:

第一步:获取最新的 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 技术预览版


第二步:重置您的位置和隐私设置

在您的设备上前往:

设置 > 通用 > 重置 > 重置位置与隐私

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


第三步:连接您的设备

在 OS X 上打开 Safari。如果您已经使用USB线连接了您的iPhone设备,请先断开连接。 现在插上它。

在OS X Safari中,前往:

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

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


愉快的调试!

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


20
非常感谢你!第二步对我非常有效 <3 - Mohamed Mo Kawsara
3
第一次工作了,但之后又出现了同样的问题。 - Shashank Agrawal
1
清空缓存对我解决了这个问题! - Luke
1
在设备上,"设置 > 通用 > 重置 > 重置位置与隐私" 对我很有帮助! - patrickbadley
第二步修复了它5分钟:') 不要开发IOS应用程序! - crg
显示剩余5条评论

51

你的iPhone上运行了很多后台应用程序吗? 关闭它们然后再试一次。

我们在WWDC向Apple开发人员展示了这个问题,他们怀疑这是由于iPhone的内存限制引起的。确实,关闭大多数后台应用程序解决了我们的问题。


7
太棒了,我并没有对这个选项抱有太高的期望,但它确实帮了忙。 - Denis
1
因此,接受答案的“重置隐私”以及这个答案似乎对我都起作用。但是,这样做比重置隐私设置要好,因为不需要不断地被每个应用程序催促允许某些事情。 - smb
谢谢!这在2021年8月对我起作用了。我以为我需要下载Safari的开发者版本。 - mattbatman
我只能打开一个应用程序,即要调试的应用程序。 - crg
哇,这个可行!! - Raphael St
这个“重置位置和隐私”对我也起作用了!(iPhone 11,iOS 15.1) - DanielRead

32

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

经过多次尝试并打开成千上万个博客文章来找到解决方案,我成功地使其工作,没有任何失败的情况。

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

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

基本上,当任何文件的大小太大时(不确定限制),Safari Web检查器会断开连接。也许是某些图像、某些脚本和CSS。在我的情况下,这是由于JavaScript及其源映射文件。

因此,当我开始在没有源映射的情况下运行我的iOS应用程序时,问题就解决了。为此,我只需要通过以下方式将--source-map=false传递给我的ionic cordova commands

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

我写了一篇关于如何加速使用Angular或Ionic进行开发的小文章,详细阐述了这个问题https://medium.com/wizpanda/a-small-tip-to-speed-up-development-with-angular-or-ionic-d5764f639c0c

原始答案

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

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

选项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 Web检查器中使用它。
选项5-在iPhone模拟器上运行
我认为这是最有效的解决方案。当您的系统没有运行太多应用程序时,此选项非常适用,因为启动模拟器会占用大量系统资源。
基本上,不要在真实设备上运行您的应用程序,而是通过Xcode在iPhone模拟器上运行您的应用程序,并在Safari Web检查器中正常调试即可避免出现此问题。
这可能是因为传输到Safari检查器的文件来自系统本身。

3
清空缓存对我也起了作用。 - Luke
1
到目前为止,第三个选项似乎对我来说是最可靠的。 - OJ7
1
第三个是保证的。您在macOS上可以使用Spotlight来打开控制台。 - sandaru.ny
1
第二个选项立即适用于我的两个设备(5s和Xs)。 - Gigo
1
第3个选项对我而言似乎是救命稻草 - 连接更大的源码图时的想法是先连接到设备上的任何小应用程序,然后再切换到同一设备上的另一个应用程序/标签。谢谢! - ciekawy
尝试了所有的方法,但都没有成功 :/ 我后悔为IE6开发。 - Christian Vincenzo Traina

10

这只适用于物理设备。如果设备电池已经充满,Safari 可以强制断开物理设备连接。(“电池充满了?那么,既然你不需要充电了,我们就断开你的连接——您的调试会话也将结束……”)

您需要在 Develop > [设备] 中选择 通过网络连接,然后将调试器附加到要调试的页面上。如果您在 Safari 中没有开发菜单,请转到 Safari > 偏好设置 > 高级 并选择 在菜单栏中显示“开发”菜单

输入图像描述

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

如果仍有问题,请断开 iOS 设备的连接。进入 iOS 设备的 设置 > Safari > Web 检查器,并关闭然后再打开。强制退出 Safari。重新插入您的 iOS 设备并重新启动 Safari,然后通过 Safari > 开发菜单重新附加您的 iOS 设备。


1
通过网络连接对我很有用。在Safari v11.1.2 iOS 11.4.1上,如果没有网络选项,它会立即崩溃。谢谢! - Dmitri R117

10

听起来很奇怪,但可能是由于电池充满引起的断开连接:

https://forums.developer.apple.com/thread/92290

似乎在Iphone电池充满时发生了断开连接。(所以我们暂时打开闪光灯和相机来消耗电池,同时检查...)


这可能是你来到这个SO帖子的原因。上面的答案对我有所帮助。 - reZach
我曾认为这是我的问题根源,但事实并非如此。因此,请注意这可能不是问题所在。 - xixixao

3
关闭XCode对我很有帮助。

2
我不能说我有一个解决方案,但是朝着正确的方向迈出了一步。
我尝试使用ios-webkit-debug-proxy,这样我就可以使用Chrome Dev工具而不是Safari Dev工具。
请注意,为了使其正常工作,我需要将我的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。听起来像是某个地方的低级错误。不确定该向哪里提交这个问题……

坐下来使用控制台应用程序跟踪此错误,并获得了一些新的见解,我将更新我的上面的帖子。 - Stefan Rein
1
我成功地创建了一个 ios-webkit-debug-proxy 的复制,并且它似乎与这个问题相关,因为这个复制与 Safari Web Inspector 问题一致。当未压缩的源代码与 sourcemaps 一起使用时,它似乎是一个 JavaScript 源大小的问题。 - Chet
你说得对!谢谢!使用 Angular 的 AOT 编译器进行生产构建,主文件 main.js 大小为 1.8 MB,vendor.js 大小为 2.4 MB,没有 sourcemap 文件,无论是否连接 Xcode,都可以正常工作。不过我仍然想要调试我的开发构建版本。 - Stefan Rein
1
是的,我也是。我正在处理一个未压缩的39MB js文件。 - Chet
我可以确认,移除源代码映射对我来说解决了这个问题。 - JW.

2

这个神奇的解决方案对我有效:

  1. 重启你的MAC电脑
  2. 重启你的iPhone手机
注:Original Answer 翻译成“最初的回答”

1
重新启动iPhone是唯一有效的方法,至少可以暂时解决问题。 - luky

2
这个问题困扰了我很长时间,它的行为非常不一致,以下是我发现的一些有用的方法,我还在这里写了一篇博客文章:点击查看
  1. 更新Mac Safari和iOS - 我发现只有在两个版本都是最新的情况下,Web检查器才开始工作,因为Safari之间可能存在调试不兼容性。

  2. 检查iOS中的Web检查器是否已启用 - 升级后已知该设置可能会关闭,请在设置> Safari>高级> Web检查器中进行检查。

  3. 检查您连接的端口 - 我的设备连接到一个廉价的集线器 / 通过苹果键盘/显示器集线器,发现直接连接到Mac上效果更好。

  4. 您使用的电缆质量如何? - 我发现质量更好/官方电缆在调试时可靠性更高,而且没有磨损。

  5. 其他值得注意的观察 - 其他人评论说,在Safari中确保启用Cookie、启用私密模式并在Xcode打开时尝试可能会影响此功能的可靠性,尽管我自己没有看到这一点,但可能会帮助其他人尝试。


2

2020年09月07日

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

Ionic / Capacitor的解决方案:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接