我正在试图找出为什么使用Javascript的东西在UIWebView中不起作用。据我所知,没有办法在XCode中为js文件设置断点。没问题,我将回到2004年并使用警报状态 - 哦等等他们似乎也不在UIWebView内工作!
我唯一能想到的是将我的HTML和JS文件导出到我的桌面,然后在Safari中进行调试。这有效!但是,当然,我在UIWebView中遇到的错误在Safari中不会发生。
是否还有其他方法可以在UIWebView内部进行调试,或者使用类似于使用旧式警报方法的任何技巧?
答案 0 :(得分:259)
如果你使用的是iOS> = 6并且你有山狮(10.8)或Safari> = 6,你可以:
Preferences -> Advanced
并确保“在菜单栏中显示开发菜单”已启用。Develop -> iPhone Simulator -> [your webview page]
。就是这样!
答案 1 :(得分:31)
此查询高于谷歌,因此值得链接到remoteInspector hidden in iOS5 - 目前为止调试UIWebViews的最佳方法 - 只是在发送给Apple之前有条件编译。
答案 2 :(得分:9)
alert()肯定对我有用。
但是,您还可以执行许多其他操作,例如在层中弹出自己的DHTML警报。这可能很好,因为您可以对单个div执行多个警报,而无需停止您的应用程序。您还应该能够为其编写堆栈跟踪(堆栈跟踪位于异常对象中,您始终可以抛出自己的异常)。
或者,如果在模拟器上运行,您的自定义“alert()”可以调用目标C,并在iPhone模拟器的控制台窗口中显示该字符串:
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环境中的必要内容)
答案 3 :(得分:6)
我还没有尝试过这个,但请看一下这个Weinre
看起来很有希望。
答案 4 :(得分:4)
这是一个老问题。但我仍然愿意分享我的两分钱。
我一直在使用jsconsole.com进行远程调试。这很简单。只需包含一个脚本标记,并使用控制台日志通过打印进行调试。这也可以用于在真实设备上进行调试。
答案 5 :(得分:3)
老问题,但我认为我找到了最好的解决方案,在我的情况下你需要调试uiwebview,但我无法访问IOS应用程序,只能访问html内容,我必须查看一些JS日志,我添加了以下代码加载轻型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>
答案 6 :(得分:2)
我得到了调试 UIWebView 的绝妙方法,或者 SFSafariViewController 。
我希望它会有所帮助。
步骤1: 在您的Mac中打开Safari VC(哈哈哈,别露脸,如果我在Macbook中说,请按照我的步骤进行)
第二步::转到Safari偏好设置,然后单击“高级”。您将在MacBook屏幕上获得此设置。
现在在菜单栏中启用“显示”以展开菜单。现在,您的所有工作都已完成。您是否在想我在开玩笑:P:P没人...
第3步:在“设备”或“模拟器”中运行您的应用程序。 (不要认为只是运行)然后进入打开Webview或SFSafariViewController的应用程序。 到现在为止您还不了解我所知道的。冷静点,看看我的下一步。
步骤4::在MacBook中打开Safari,然后从菜单栏中单击“开发选项”。 MacBook,iPad / iPhone显示正确吗????
第5步:。单击您的设备,然后单击URL。这样会弹出新弹出窗口。
第6步:您现在在这里查看所有步骤。
现在在此控制台上调试网页。 喝杯茶或 咖啡。
答案 7 :(得分:-1)
您可以设置类似PhoneGap中使用的系统,将JavaScript中的消息发送到Objective-C并从那里进行记录。简而言之,他们使用自定义方案设置document.location并在委托回调中阻止该方案。
您可以利用UIWebView是WebView的大部分委托这一事实。 WebKit在技术上没有用于iPhone的文档,但大多数与桌面WebKit头文件中指定的相同,可能包括WebScriptObject。我使用它进行调试,但在提交给Apple之前一定要删除此代码。
要从UIWebView获取WebView,请在UIWebView的子类中实现类似-(void) webView:(id)inWebView didFinishLoadForFrame:(id)inWebFrame
的委托方法。如果您使用那个,请拨打超级。