在UIWebView中调试on-launch Javascript

Ark*_*ito 3 uiwebview javascript-debugger ios safari-web-inspector

我正在调试一个嵌入在UIWebView中的网页,以便在应用程序中显示.

它使用了一些精心设计的onload Javascript,它在Android应用程序中运行良好但在iOS应用程序中断.

这个答案向我指出Safari网络督察的UIWebView -然而,由于破JavaScript是被在页面加载运行,我实际上并不能附加检查,及时捕捉什么地方出了错.

现在我通过在页面中手动插入延迟来解决它,但是有更好的方法(不需要我对页面代码本身进行更改,启动应用程序,急于在Safari中加载它,等待一段时间再继续)?

Ark*_*ito 7

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

原帖:我能找到的唯一解决方案是进行shouldStartLoadWithRequest:如下"额外"调用:

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

    <script type="text/javascript">
        window.location = "myapp://catchme";
    </script>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在中设置XCode断点 shouldStartLoadWithRequest:

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

    (bool)[[[request URL] absoluteString] isEqualToString:@"myapp://catchme"]
    
    Run Code Online (Sandbox Code Playgroud)

    (如果没有这个条件,它将在初始shouldStartLoadWithRequest:呼叫时停止,这不是您想要的,因为在此阶段,该页面将无法用于连接Mobile Web Inspector.)

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

  • 供参考:如果您运行的是最新软件,只需在 safari 检查器上按 cmd + r 即可重新加载 webview (2认同)