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

时间:2010-05-04 18:20:02

标签: javascript iphone html5 uiwebview

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

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

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

8 个答案:

答案 0 :(得分:259)

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

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

答案 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屏幕上获得此设置。

enter image description here

现在在菜单栏中启用“显示”以展开菜单。现在,您的所有工作都已完成。您是否在想我在开玩笑:P:P没人...

第3步:在“设备”或“模拟器”中运行您的应用程序。 (不要认为只是运行)然后进入打开Webview或SFSafariViewController的应用程序。 到现在为止您还不了解我所知道的。冷静点,看看我的下一步。

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

enter image description here

第5步:。单击您的设备,然后单击URL。这样会弹出新弹出窗口。 enter image description here

第6步:您现在在这里查看所有步骤。

  

现在在此控制台上调试网页。   喝杯茶或   咖啡。

IMP:不要忘记启用“查看下图” enter image description here  

答案 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的委托方法。如果您使用那个,请拨打超级。