web-dev-qa-db-ja.com

UIWebView内でJavascriptをデバッグする方法は何ですか?

私は、JavascriptのあるものがUIWebView内で機能しない理由を理解しようとしています。私の知る限り、jsファイルのXCode内にブレークポイントを設定する方法はありません。問題ありません。2004年に戻ってアラートステートメンを使用するだけです。UIWebViewの内部でも機能していないようです。

考えられる唯一のことは、HTMLファイルとJSファイルをデスクトップにエクスポートし、Safari内でデバッグを行うことです。そしてそれは動作します!しかしもちろん、UIWebViewで私が戦っているバグはSafariでは発生しません。

UIWebView内でデバッグする他の方法、または古い学校のアラートメソッドを使用するのと同じように使用できるトリックはありますか?

127
bpapa

IOS> = 6を使用していて、Mountain Lion(10.8)またはSafari> = 6を使用している場合、次のことができます。

  1. シミュレーター(またはXCode> = 4.5.xのデバイス)でアプリケーションを開きます。
  2. Safariを開きます(Preferences -> Advancedに移動し、[メニューバーに開発メニューを表示]がオンになっていることを確認します。
  3. (Safariの)メニューバーからDevelop -> iPhone Simulator -> [your webview page]を選択します。

それでおしまい !

262
refaelos

このクエリはグーグルを上回っているので、 iOS5に隠されたremoteInspector -UIWebViewsをデバッグするためのこれまでのところ最良の方法-Appleに送信する前に条件付きコンパイルにリンクする価値があります。

31
Dan Bennett

alert()は確かに私のために動作します。

ただし、レイヤーにポップアップする独自のDHTMLアラートを作成するなど、他の多くのこともできます。アプリを停止することなく、1つのdivに対して複数のアラートを実行できるため、これは素晴らしいことです。スタックトレースを書き込むこともできるはずです(スタックトレースは例外オブジェクトにあり、いつでも独自の例外をスローできます)。

または、シミュレータで実行している場合、カスタム「alert()」はObjective Cを呼び出して、iPhoneシミュレータのコンソールウィンドウに文字列を表示できます。

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   

また、Objective C側では:

//--------------------------------------------------------------------
- (BOOL)webView:(UIWebView*)webView 
       shouldStartLoadWithRequest: (NSURLRequest*)req 
       navigationType:(UIWebViewNavigationType)navigationType {
    if ([[[req URL] Host] isEqualToString:@"debugger"]){
        // do stuff with [[req URL] path] 
       }
}

そうは言っても、UiWebView/javascriptに重きを置いているアプリがあり、ほとんどのjavascript devをChrome(iPhone環境から必要なものをシミュレート)する傾向があります

9
rob

まだ試していませんが、これを見てください Weinre

とても有望に見えます。

これは古い質問です。しかし、私はまだ2セントを共有したいと思います。

リモートデバッグに jsconsole.com を使用しています。それは簡単です。スクリプトタグを含めて、コンソールログを使用して印刷するだけでデバッグします。これは、実際のデバイスでのデバッグにも使用できます。

4
Kazekage Gaara

UIWebViewまたはSFSafariViewControllerをデバッグする素晴らしい方法が得られます。

私はそれが役立つことを願っています。

ステップ1:Safari Safariを開くVCお使いのMacで(笑)Macbookで言っているだけなら私の手順に従ってください)

Step2:Safariの設定に移動し、Advanceをクリックします。 MacBook画面でこの設定を取得します。

enter image description here

次に、ショーを有効にして、メニューバーのメニューを開発します。これで、すべての作業が完了しました。あなたは私が冗談だと​​思っていますか?

Step3:デバイスまたはシミュレータでアプリケーションを実行します。 (単に実行するとは思わない)そして、WebviewまたはSFSafariViewControllerを開くアプリケーションに移動します。今まで、あなたは私が知っていることを理解していませんでした。クールになって、私の次のステップを見てください。

Step4:MacBookでSafariを開き、メニューバーから[開発オプション]をクリックします。 MacBook、iPad/iPhoneが正しく表示されるものを手に入れましたか?????

enter image description here

Step5:その完了。デバイスをクリックし、URLをクリックします。新しいポップアップがこのように表示されます。 enter image description here

Step6:ここですべてのステップを探しています。

次に、このコンソールでWebページをデバッグします。お茶やコーヒーを飲みながらコーディングをしながら、1日を楽しんでください。

IMP:有効にすることを忘れないでくださいSee Below Imageenter image description here

3
Anup Gupta

古い質問ですが、最良の解決策を見つけたと思います。私の場合、uiwebviewをデバッグする必要がありますが、IOSアプリにはアクセスできず、htmlコンテンツにのみアクセスでき、JSログを表示する必要がありました、次のコードを追加して、light firebug JSをロードし、自動的に表示します。

JSから呼び出す

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://getfirebug.com/firebug-lite-debug.js';
document.head.appendChild(script);

またはhtmlから読み込む

<script type="text/javascript" src="https://getfirebug.com/firebug-lite-debug.js"></script>
3
talsibony