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

问题描述 投票:125回答:8

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

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

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

javascript iphone html5 uiwebview
8个回答
262
投票

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

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

而已 !


31
投票

这个查询在谷歌上面,所以值得链接到remoteInspector hidden in iOS5 - 到目前为止调试UIWebViews的最佳方法 - 只是在发送给Apple之前有条件编译。


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环境中的必要)


6
投票

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

看起来很有希望。


4
投票

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

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


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>

3
投票

我得到了调试UIWebView或SFSafariViewController的绝佳方法。

我希望它会有所帮助。

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

Step2:进入Safari偏好并单击Advance。您将在MacBook屏幕上获得此设置。

enter image description here

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

第3步:在设备或模拟器中运行您的应用程序。 (不要认为只是运行)并进入您打开Webview或SFSafariViewController的应用程序。直到现在你才明白我知道。很酷,看看我的下一步。

步骤4:在MacBook中打开Safari,然后从菜单栏中单击“开发选项”。你有没有得到你的MacBook,iPad / iPhone显示正确?????

enter image description here

第五步:完成。点击你的设备,然后点击URL新的弹出窗口就像这样。 enter image description here

Step6:你现在正在寻找它的所有步骤。

现在在此控制台上调试您的网页。在享受编码的同时享用您的一天,享用一杯茶或咖啡。

IMP:别忘了启用参见下图enter image description here


-1
投票

您可以设置一个类似PhoneGap中使用的系统,将消息从JavaScript发送到Objective-C并从那里进行记录。简而言之,他们使用自定义方案设置document.location并在委托回调中阻止该方案。

您可以利用UIWebView是WebView的大多数委托这一事实。 WebKit在技术上没有用于iPhone的文档,但大多数与桌面WebKit头文件中指定的相同,可能包括WebScriptObject。我使用它进行调试,但在提交给Apple之前一定要删除此代码。

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

© www.soinside.com 2019 - 2024. All rights reserved.