【问题标题】:javascript in iOS webview not working in app's code, but does work in remote debuggeriOS webview中的javascript在应用程序代码中不起作用,但在远程调试器中起作用
【发布时间】:2012-11-14 12:09:45
【问题描述】:

我正在 web 视图上通过 stringByEvaluatingJavaScriptFromString 运行一些 javascript 代码。当我尝试在代码中记录 js 的结果时没有输出,除非我运行像“document.title”这样简单的东西,它可以工作。

但是使用 Safari 中的远程调试器,我可以使用控制台运行完全相同的代码并获得正确的结果。

关于这里可能发生什么会阻止 javascript 在应用程序中工作的任何想法?显然代码很好,因为它可以在调试器中运行。在应用内的 webviews 中运行 javascript 有限制吗?

谢谢!

【问题讨论】:

  • 您如何尝试将结果记录到控制台?当初做的时候,没有远程调试,所以我基本上是用code.google.com/p/jsbridge-to-cocoa把JS中的对象发回Objective C,在那里调查结果。
  • 我只是在使用 NSLog,我认为这没问题,因为它正确记录了 document.title 之类的内容。
  • 好吧,现在你失去了我。您是否将 NSLog 放入 javascript 代码中?您能否发布一些您正在尝试的源代码?
  • 不,抱歉。我的意思是我在我的应用程序代码中使用了 NSLog。我在原始帖子中提到的控制台来自远程调试窗口,它只允许您通过应用程序的 web 视图运行 javascript。因此,当我在远程调试器中运行 javascript 代码时,它按预期工作。但是在应用程序的源代码中具有完全相同的代码(使用 stringByEvaluating...等执行)并运行应用程序,javascript 代码不起作用。所以我不知道哪里出了问题......

标签: javascript ios remote-debugging


【解决方案1】:

我在让 Javascript/Native 接口工作时也遇到了一些问题,所以我的一些学习:

  • 一旦 Javascript 解释器遇到错误(无论如何,缺少分号或其他),它就会静默停止工作并且不会继续。
  • 听起来很愚蠢,但是将 @"alert(1);" 放入您的 stringByEvaluatingJavaScriptFromString: 中,看看它是否有效。
  • 保持通过 stringByEvaluatingJavaScriptFromString 发送的命令简短;创建 javascript 方法并从本机代码调用它们,例如
    [self.webView stringByEvaluatingJavaScriptFromString:@"doalliwant();"];
    而不是通过该接口传输 100 kb 的文件。
  • 使用 https://code.google.com/p/jsbridge-to-cocoa/ 之类的东西将数据从 Javascript 发送到 Obj-C 代码。这样,您可以在 Javascript 中实现最少的登录。 (通过将其发送到 Obj-C 并在那里记录)
  • 为您的 UIWebview 使用远程调试,WWDC 会话“600 - 在 iOS 上调试 UIWebViews 和网站”对此进行了描述。您可以通过 iOS 开发者计划网站获得它。要启用基础功能,请转到 Settings->Safari->Advanced 并启用 Web Inspector。将您的设备连接到 Mac,在调试器中启动 XCode 和您的应用程序。在 Mac 上启动 Safari。打开 Safari 的设置,在最后一个选项卡中启用开发者菜单。重新启动 Safari。在新的开发者菜单中,您现在应该可以看到您的 iOS 设备的名称,您可以在其中选择您的应用程序并开始调试。

希望这能让你开始...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 2015-10-05
    • 2014-04-08
    • 2012-06-05
    相关资源
    最近更新 更多