ios - 在 UIWebView 中调试启动时的 Javascript

标签 ios uiwebview javascript-debugger safari-web-inspector

我目前正在调试嵌入在 UIWebView 中以在应用程序中显示的网页。

它使用一些精心设计的加载 Javascript,在 Android 应用程序中运行良好,但在 iOS 应用程序中出现问题。

This answer将我指向用于 UIWebView 的 Safari Web Inspector - 但是,由于损坏的 Javascript 正在页面加载时运行,我实际上无法及时附加检查器以捕获出现的任何问题。

现在我正在通过在页面中手动插入延迟来绕过它,但是有没有更好的方法(不需要我更改页面代码本身,启动应用程序,急于加载它在 Safari 中打开,然后稍等片刻才能继续)?

最佳答案

重要修改:在 Safari 7.0 中,您可以通过选择“资源” View 并单击顶级页面旁边的刷新箭头来重新加载页面。 [看来您也可以在至少某些版本的 Safari 6 中执行此操作,方法是选择文档选项卡,单击顶级页面将其选中,然后按 Command+R(与在普通 Safari 中刷新页面的快捷方式相同) .] 如果您从 Safari Web Inspector 刷新页面,您设置的断点将仍然存在,因为这样做不会导致 SWI 分离从您的应用程序或 Xcode 调试器中重新加载页面的方式。这意味着,只要该页面不执行 Javascript 重定向或在应用程序本身中触发副作用,您就可以单步执行 onload Javascript,方法是加载一次页面,在那里设置断点,然后重新加载来自 SWI 的页面

原始帖子:我能够找到的唯一解决方案是对 shouldStartLoadWithRequest: 进行“额外”调用,如下所示:

  1. 添加脚本(不是 onload,同步)作为页面头部的第一个元素:

    <script type="text/javascript">
        window.location = "myapp://catchme";
    </script>
    
  2. shouldStartLoadWithRequest:

    中设置 XCode 断点
  3. 编辑断点以设置条件:

    (bool)[[[request URL] absoluteString] isEqualToString:@"myapp://catchme"]
    

    (如果没有这个条件,它会在最初的 shouldStartLoadWithRequest: 调用时停止,这不是您想要的,因为在这个阶段该页面还不能附加到 Mobile Web Inspector .)

  4. 开始页面加载,当它遇到 (Xcode) 断点时,切换到 Safari,并使用 Develop > iPhone Simulator >(我的页面)启动 Mobile Web Inspector,然后切换回 Xcode 并在其中继续执行在页面上的所有资源请求超时之前的一个短暂窗口。

关于ios - 在 UIWebView 中调试启动时的 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15346123/

相关文章:

javascript - Firebug:查找 Javascript 事件来源

javascript - 当鼠标悬停在变量上时,Firefox 开发者版不显示快速监视弹出窗口

objective-c - iOS 6 游戏中心

ios - 更改旋转时嵌入的 UITextView 宽度?

javascript - 更改 UIWebVIew 中 HTML 元素的位置

ios - 检索 UIWebView 缓存?

javascript - 解析调试器关键字

ios - 使用 Decodable 解码同一键中的不同对象数组

iphone - 传递 float 给出垃圾值

ios - Dailymotion 播放器无法在 UIWebview Swift 3 中工作