在UIWebView中调试Javascript有哪些方法?

bpa*_*apa 130 javascript iphone html5 uiwebview

我试图找出为什么使用Javascript的东西在UIWebView中不起作用.据我所知,没有办法在XCode中为js文件设置断点.没问题,我将回到2004年并使用警报状态 - 哦等等他们似乎也不在UIWebView内部工作!

我唯一能想到的是将我的HTML和JS文件导出到我的桌面,然后在Safari中进行调试.这有效!但是,当然,我在UIWebView中遇到的错误在Safari中不会发生.

是否还有其他方法可以在UIWebView内部进行调试,或者使用类似于使用老派警报方法的任何技巧?

ref*_*los 267

如果你使用iOS> = 6并且你有山狮(10.8)或Safari> = 6,你可以:

  1. 在模拟器中打开应用程序(或在XCode> = 4.5.x中打开您的设备).
  2. 打开Safari(转到Preferences -> Advanced并确保"在菜单栏中显示开发菜单"已启用.
  3. 从菜单栏(Safari)中选择Develop -> iPhone Simulator -> [your webview page].

而已 !

  • 在模拟器上不确定,但要在设备上运行,您必须在设置中启用该选项.`Settings`>`Safari`>`Advanced`>`Web Inspector` < - 启用此功能 (9认同)
  • @RajV您可以在物理设备上调试UIWebViews,但只能在您的设备上调试直接使用XCode的UIWebViews,而不是Appstore中的那些. (7认同)
  • 这仅适用于在模拟器中运行应用程序的情况.如果您必须使用iOS设备进行调试,请参阅此方法http://mobiarch.wordpress.com/2013/04/06/javascript-console-log-from-a-uiwebview/ (6认同)

Dan*_*ett 31

这个查询高于谷歌,因此值得链接到iOS5中隐藏remoteInspector - 到目前为止调试UIWebViews的最佳方法 - 只是在发送给Apple之前有条件编译.

  • 仍然可以工作,像这样使用它:`[NSClassFromString(@"WebView")performSelector:@ selector(_enableRemoteInspector)];`记住在构建发布时删除调用! (3认同)
  • 我之前曾经使用过这个,但显然自从Mountain Lion出现以后它就不起作用了(可能的解决方法):http://www.iwebinspector.com/help.html#ml (3认同)

rob*_*rob 9

alert()肯定对我有用.

但是,您还可以执行许多其他操作,例如在层中弹出自己的DHTML警报.这可能很好,因为您可以对单个div执行多个警报,而无需停止您的应用程序.你也应该能够堆栈跟踪写它(堆栈跟踪是在异常对象,你可以随时抛出自己的例外).

或者,如果在模拟器上运行,您的自定义"alert()"可以调用目标C,并在iPhone模拟器的控制台窗口中显示该字符串:

document.location.href = "http://debugger/" + 
   encodeURIComponent(outputString);   
Run Code Online (Sandbox Code Playgroud)

在目标C方面:

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

也就是说,我有一个在UiWebView/javascript上很重的应用程序,我倾向于在Chrome中做大多数javascript开发(模拟iPhone环境中的必要)


Anu*_*pta 8

我得到了调试UIWebViewSFSafariViewController的绝妙方法。

我希望它会有所帮助。

第 1 步: ? 在您的 Mac 中打开 Safari VC(哈哈哈,不要脸,如果我在您的 Macbook 中说,请按照我的步骤操作)??

步骤 2:进入 Safari 首选项并单击高级。??您将在 MacBook 屏幕上获得此设置。

在此处输入图片说明

现在在菜单栏中启用 Show to develop 菜单。?? 现在你的所有工作都完成了。??你以为我在开玩笑:P :P 没有人... ??

步骤 3:在设备或模拟器中运行您的应用程序。(不要认为只是运行)?然后进入您打开 Webview 或 SFSafariViewController 的应用程序。? 直到现在你不明白我知道。冷静点,看看我的下一步。

? 第 4 步:在 MacBook 中打开 Safari,然后单击菜单栏中的“开发选项”。??您的 MacBook、iPad/iPhone 显示正确了吗????

在此处输入图片说明

?? 第5步:完成。单击您的设备并单击 URL 新弹出窗口将像这样出现。 在此处输入图片说明

???Step6:你现在在看什么,所有步骤都在这里。

现在在此控制台上调试您的网页。一边喝茶或喝咖啡一边编码,一边快乐和享受你的一天。

IMP:不要忘记启用见下图 在此处输入图片说明 ???????


Adr*_*wne 6

我还没试过,但看看这个Weinre

看起来很有希望.

  • 仅链接答案更适合作为评论. (2认同)

Kaz*_*ara 5

这是一个老问题了。但我仍然想分享我的两分钱。

我一直使用jsconsole.com进行远程调试。这很容易。只需包含一个脚本标签并使用控制台日志通过打印进行调试。这也可以用于在真实设备上进行调试。