Explain Codes LogoExplain Codes Logo

What are some methods to debug Javascript inside of a UIWebView?

javascript
debugging
web-inspector
remote-debugging
Nikita BarsukovbyNikita Barsukov·Mar 10, 2025
TLDR

To debug JavaScript in a UIWebView, activate Safari’s Web Inspector. On Mac, it's at Safari > Preferences > Advanced > Show Develop Menu. On your iOS, it’s under Settings > Safari > Advanced. Connect your iOS device to Mac, launch your app having UIWebView, now go to Safari’s Develop menu and select your device. Voila, you've just opened the Pandora's box of JavaScript debugging.

The field of view: Beyond Safari's Web Inspector

While Safari’s Web Inspector is your command center, other crucial tools and techniques should be on your utility belt for effective debugging:

  1. Console Logs: Instrument your JavaScript code with console.log() to trace your code in action.
  2. Custom Alerts: Temporary alerts (window.alert()) can be your early warning system.
  3. Remote Debugging: Tools like Weinre serve as your parachute when you need remote debugging.
  4. Objective-C Bridge: Through webView:shouldStartLoadWithRequest:navigationType: method in Objective-C, you can tap into the matrix of URL requests.
  5. Simulators: Replicate the iOS environment within Chrome DevTools and debug like a ninja.
  6. Error Handling: Capture and display JavaScript errors to a custom UI element inside UIWebView.

Deep diving: Uncovering the hidden bugs

Unconventional scenarios call for advanced debugging techniques. Let's delve deep:

Real-time code interactions

Using Safari’s Develop menu to interact with your code in real time:

  • Breakpoints: Set up strategic stops to inspect variables and call stack.
  • Inspect Elements: Alter DOM and witness style changes live.
  • Network Tab: Keep an eye on network requests made by your UIWebView content.

Hunting the elusive bugs

When bugs don't show up in Safari:

  • DHTML Custom Alerts: Create alerts that pop up without putting the app on hold.
  • Exception Handling: Use try-catch blocks to trace and examine exceptions, effectively turning your bugs into your informants.

Bridging two worlds

Spanning the gap between JavaScript and Objective-C:

  • URL Scheme Interception: Use document.location.href to pass coded messages from JavaScript to Objective-C handlers.
  • Custom Stack Traces: Generate and dispatch stack traces from JavaScript to Objective-C for in-depth analysis.

Unique debug environments

For issues avoiding Safari, you can simulate iPhone environment using Chrome's Mobile Device Emulator and corner the bugs.

Debug, Reinvented

Experiment with unorthodox methods:

  • Console.log redirect: Show console.log outputs inside a UIWebView by redirecting them to a DHTML element.
  • Manual Stack Tracing: Plot your own stack traces in JavaScript to follow the execution flow.