CrocProbe
Menu

Fixes → Page suspended

Connected, listed, and running nothing

The page appears in the target list. The inspector connects. Then evaluating anything hangs or comes back empty, the console stays silent, and breakpoints never hit. The connection is fine. iOS has suspended the page's JavaScript because the tab is not in the foreground.

You are in the right place if:

the target is listed and attaches successfully, but evaluations time out or return nothing, timers never fire, and the console produces no output while everything about the connection looks healthy.

Where this sits

  1. This PC Windows verified
  2. Apple driver usbmux verified
  3. Debug proxy WebKit bridge verified
  4. iPhone over USB verified
  5. Safari page suspended reached, not usable

Every transport is verified. Nothing is broken. The last step is reached and unusable, which is different from a failed connection. It is the distinction that saves you from re-checking cables and drivers for an hour.

The fix

  1. Bring the Safari tab to the foreground on the phone and keep it there. Show the page itself in Safari, visible, with Safari the frontmost app.
  2. Keep the screen awake. Raise Auto-Lock (Settings → Display & Brightness → Auto-Lock). A screen that dims mid-session reproduces the same symptom and looks like an intermittent bug.
  3. Do not switch apps to read the results. This is the trap: you run something, switch to another app to check a value, and the page suspends while you are away. Read results on the desktop, and leave the phone alone.

Why it looks like a protocol failure

A backgrounded WebKit page does not disconnect. The inspector agent keeps acknowledging protocol traffic. The target stays listed, attach succeeds, and commands are received while the page's JavaScript execution is suspended by the system. So every signal a debugging tool normally uses to decide whether a connection is alive reports healthy, and the one thing you actually want does not happen.

That is why so many tools present this as a generic timeout. They ask “is the socket up?”, get yes, ask “did the evaluation return?”, get nothing, and have no vocabulary for the state in between. It is a real iOS behaviour. Reporting it as a timeout sends you looking in entirely the wrong place.

There is no workaround that makes a backgrounded tab execute. If you need the page doing work while you are not looking at it, the phone has to be showing it.

Related