5

現在、アプリに表示するために UIWebView に埋め込まれている Web ページをデバッグしています。

これは、Android アプリでは問題なく動作しますが、iOS アプリでは壊れる、いくつかの精巧なオンロード Javascript を使用します。

この回答は、UIWebView の Safari Web インスペクターを示しました。

現在、ページに手動で遅延を挿入することでハッキングしていますが、より良い方法がありますか (ページコード自体を変更し、アプリを起動し、急いで Safari にロードする必要はありません)。 、それが続くまでしばらく待ちます)?

4

4 に答える 4

8

重要な編集: Safari 7.0 では、[リソース] ビューを選択し、最上位ページの横にある更新矢印をクリックして、ページをリロードできます。[少なくとも Safari 6 の一部のバージョンでは、ドキュメント タブを選択し、最上位ページをクリックして選択し、Command+R を押すことで実行できるようです (通常の Safari でページを更新するために使用されるショートカットと同じです)。 .] 設定したブレークポイントは、Safari Web インスペクターからページを更新した場合でも存在します。これは、アプリ内からページをリロードする方法や Xcode デバッガーが行う方法とは異なり、SWI がデタッチしないためです。この意味はページが Javascript リダイレクトを実行したり、アプリ自体で副作用をトリガーしたりしない限り、ページを 1 回ロードし、そこにブレークポイントを設定してから 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 に切り替え、[開発] > [iPhone シミュレーター] > (マイページ) で Mobile Web Inspector を起動し、Xcode に戻って、すべてのエラーが発生する前の短いウィンドウ内で実行を再開します。ページのリソース要求がタイムアウトします。

于 2013-03-14T23:30:34.963 に答える
-1

shouldStartLoadWithRequestにブレークポイントを設定してから、インスペクターを開いてみませんか?

于 2013-03-11T21:20:20.127 に答える