在UIWebView中debuggingJavascript的一些方法是什么?

我想弄清楚为什么用Javascript的东西不工作的UIWebView里面。 据我所知,没有办法在Xcode中为js文件设置断点。 没有问题,我会回到2004年,并使用警报状态 – 哦,等等,他们似乎不工作在一个UIWebView!

我唯一能想到的是通过将我的HTML和JS文件导出到我的桌面,然后在Safari中进行debugging。 那可行! 但是当然,我在UIWebView中遇到的错误在Safari中不会发生。

有没有其他方法可以在UIWebView中进行debugging,或者可以使用类似于使用旧式警报方法的技巧?

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

  1. 在模拟器(或XCode> = 4.5.x中的设备)中打开应用程序。
  2. 打开Safari(转到Preferences -> Advanced ,并确保“在菜单栏中显示开发菜单”处于打开状态。
  3. 从Safari的菜单栏中selectDevelop -> iPhone Simulator -> [your webview page]

而已 !

这个查询顶部谷歌,所以值得链接到隐藏在iOS5的remoteInspector – 迄今为止,debugging您的UIWebViews到目前为止最好的方式 – 只是有条件的编译出来之前,你发送到苹果。

alert()当然适用于我。

不过,你也可以做很多其他的事情,比如让你自己的DHTML警报popup一层。 这可以很好,因为你可以做多个警报到一个单独的div,而不会停止你的应用程序。 你也应该能够写一个堆栈跟踪(堆栈跟踪是在exception对象,你可以随时抛出你自己的例外)。

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

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

在目标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的东西沉重的应用程序,我倾向于在Chrome中做大多数的JavaScript开发(模拟iPhone环境中的必要)

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

看起来很有希望。

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

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

老问题,但我想我find了最好的解决scheme,在我的情况下,你需要debugginguiwebview,但我没有访问的IOS应用程序,只有HTML内容,我不得不查看一些JS日志,我添加了下面的代码加载轻型萤火虫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> 

您可以设置一个像PhoneGap中使用的系统,将消息从JavaScript发送到Objective-C并从那里login。 简而言之,他们使用自定义scheme设置document.location并在委托callback中阻止该scheme。

您可以利用UIWebView是WebView的大部分委托的事实。 WebKit在技术上没有为iPhone提供文档,但大部分与桌面WebKit标头中指定的相同,可能包括WebScriptObject。 我使用它来进行debugging,但一定要在提交给苹果之前将这些代码去掉。

要从UIWebView获取WebView,请在WebView的-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame中实现像UIWebView的子类中的-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame的委托方法。 如果你使用那个,叫超级。