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

IT技术 javascript iphone html uiwebview
2021-03-09 22:39:43

我试图弄清楚为什么在 UIWebView 中使用 Javascript 的东西不起作用。据我所知,无法在 XCode 内部为 js 文件设置断点。没问题,我会回到 2004 年并使用警报语句——哦等等,它们似乎也不能在 UIWebView 中工作!

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

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

6个回答

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

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

而已 !

@RajV 您可以在物理设备上调试 UIWebViews,但只能在设备上直接使用 XCode 调试 UIWebViews,而不是来自 Appstore 的那些。
2021-04-17 22:39:43
这仅适用于在模拟器中运行应用程序。如果您必须使用 iOS 设备进行调试,请参阅此方法mobiarch.wordpress.com/2013/04/06/...
2021-04-26 22:39:43
很明显,但这可能会有所帮助。我已经在运行 OSX 10.9 Mavericks 和 Safari 7 的 iOS7 模拟器上对此进行了测试 - 运行良好。谢谢你。
2021-04-28 22:39:43
不确定在模拟器上,但要在设备上运行,您必须在设置中启用一个选项。 Settings> Safari> Advanced> Web Inspector<-- 启用这个
2021-05-10 22:39:43
@refaelos 谢谢!!如果我使用开发临时配置文件,它可以与我的物理设备一起使用。
2021-05-15 22:39:43

这个查询在谷歌上名列前茅,所以值得链接到隐藏在 iOS5 中remoteInspector - 迄今为止发现的调试 UIWebViews 的最佳方法 - 在发送给 Apple 之前有条件地编译出来。

我以前曾经使用过这个,但显然自从 Mountain Lion 出现后它现在不起作用(可能的解决方法在这里):iwebinspector.com/help.html#ml
2021-04-24 22:39:43
这是一项很棒的技术。但是,请注意调试器似乎只能在 safari 中工作。我从其他浏览器(例如 chrome)尝试过它,但它什么也没显示。
2021-05-06 22:39:43
仍然有效,像这样使用它:[NSClassFromString(@"WebView") performSelector:@selector(_enableRemoteInspector)];记住在构建发布时删除调用!
2021-05-07 22:39:43

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

你是什​​么意思“警报()”当然对我有用?调用 Objective-C 是有创意的,很惊讶我之前没有考虑过,因为我已经做了一些!谢谢。:)
2021-05-10 22:39:43
是的,alert() 工作得很好。也许旧版本没有?但我只是试了一下,得到了一个弹出窗口,它看起来与在 objC 端使用 UIAlertView 完成的几乎相同。
2021-05-16 22:39:43

我得到了调试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:不要忘记启用见下图 在此处输入图片说明 








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

看起来很有前途。

我通过 npm(node.js 包管理器)安装了 weinre,它在 Mountain Lion 中对我有用。npm install -g weinre
2021-04-22 22:39:43
Adobe 现在似乎与 Weinre 达成了交易,并提供了一个名为 Adob​​e Shadow 的应用程序来实现它。效果很好。
2021-04-25 22:39:43
weinre 很酷,但要注意它没有逐步的 JS 调试器;它只是一个“网络检查员”。(直到我在 iPhone 上设置它时遇到很多麻烦,我才注意到这一点。)
2021-05-09 22:39:43
仅链接的答案更适合作为评论。
2021-05-09 22:39:43
自 Lion 以来,Weinre 似乎已停止工作:我无法再获得连接,可能是沙盒问题。
2021-05-11 22:39:43