5

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

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

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

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

4

4 回答 4

8

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

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

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

    <script type="text/javascript">
        window.location = "myapp://catchme";
    </script>
    
  2. 在 XCode 中设置断点shouldStartLoadWithRequest:

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

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

    (如果没有这种情况,它将在初始shouldStartLoadWithRequest:调用时停止,这不是您想要的,因为在此阶段该页面还不能用于附加 Mobile Web Inspector。)

  4. 开始页面加载,当它遇到 (Xcode) 断点时,切换到 Safari,并使用 Develop > iPhone Simulator > (my page) 启动 Mobile Web Inspector,然后切换回 Xcode 并在所有页面上的资源请求超时。

于 2013-03-14T23:30:34.963 回答
0

Weinre帮我解决了这个问题,因为它从一开始就是连接的,你可以完全控制页面。

于 2015-05-04T16:59:41.480 回答
-1

为什么不在 shouldStartLoadWithRequest 中设置断点,然后打开检查器?

于 2013-03-11T21:20:20.127 回答
-1

与 OP 提出的问题不是 100% 相关,但我在一个移动应用程序中遇到了与Android WebView 类似的问题,该应用程序的本机代码我无法控制(但启用了 WebView 调试)。

  • document.reload()并且所有其他类似的重新加载页面的方法都不适合我
  • 我想把它放在alert()页面的最顶部,这在理论上是一个阻塞调用,但它也对我不起作用。
  • 最后,我选择了一个阻塞的、同步的 XHR。

为了在页面加载时注入人为延迟,我在我控制下的端点添加了一个假调用,该调用在 15 秒后返回 200 OK。

把这个放在最上面<head>

  <script>
    try {
      var request = new XMLHttpRequest();
      request.open('GET', 'https://whatever/please-freeze', false); // false = sync XHR
      request.send(null);
    } catch (err){
      debugger;
    };
    debugger;
  </script>

例如,您可以创建自己的简单 http 服务器,其端点行为如下,但这有点矫枉过正。

无论出于何种原因,这些debugger语句都没有触发 Chrome 中的断点,但是动态加载的代码(之前创建的)中手动定义的断点运行良好。

适用于 Windows (Fiddler) 用户的 hack

因为我在 Windows 上,所以我使用 Fiddler创建了一个有延迟的自动回复。

有延迟的提琴手自动回复

我还使用 Fiddler 来编辑原始页面请求的 HTML,以注入<script>前面提到的内容。

于 2018-06-26T10:09:20.090 回答