如何在 Swift 中将 javascript console.log 到 println() 到 Xcode 调试器?

Posted

技术标签:

【中文标题】如何在 Swift 中将 javascript console.log 到 println() 到 Xcode 调试器?【英文标题】:How can I get javascript console.log to println() to the Xcode debugger in Swift? 【发布时间】:2014-12-26 15:37:43 【问题描述】:

有没有办法在 Xcode 中使用 swift 向调试器显示 javascript 错误和/或控制台日志?如果有,怎么做?

【问题讨论】:

【参考方案1】:

您可以使用桌面 Safari 开发者工具。

    运行 Xcode 模拟器。 打开桌面 Safari 开发者工具。桌面 Safari 菜单 -> 开发 -> Simulator-iPhone XXX -> 您的 Xcode Simulator 应用程序名称。然后会出现一个 Web Inspector。 当您运行 Xcode 模拟器时,所有 console.log() 消息都将打印在 Web Inspector 的“控制台”选项卡上。选择正确的过滤器,例如“全部”或“日志”。

要在桌面 Safari 菜单上显示开发项目,请转到 Safari 菜单 -> 首选项 -> 高级 -> 在菜单栏中显示桌面菜单。

【讨论】:

有帮助,谢谢。【参考方案2】:

如果你已经在你的 javascript 和 swift 代码之间建立了正确的连接(例如使用这里的方法:http://www.kinderas.com/technology/2014/6/15/wkwebview-and-javascript-in-ios-8-using-swift),你可以在 JS 中编写一个方法,它会在 swift 中向指定的 scriptMessageHandler 发送消息,然后 println到 xcode 输出。

类似这样的东西(匆忙写下,可能是错别字)

JS 方法发送到 swift:

function sendConsole(message) 
    try 
        webkit.messageHandlers.myMessageHandler.postMessage("Console:" + message);
     catch(err) 
        console.log('Something is wrong');
    

提取 swift 代码来处理它:

func userContentController(userContentController: WKUserContentController, didReceiveScriptMessage message: WKScriptMessage) 

    if(message.name == "myMessageHandler") 
        println(message.body)
     

如果您不确定如何执行此操作,请点击链接,他的解释非常出色。

【讨论】:

如果我添加自己的打印功能,这听起来不错,但是如何将 js window.console.log 重定向到 webkit.messageHandlers.myMessageHandler

以上是关于如何在 Swift 中将 javascript console.log 到 println() 到 Xcode 调试器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 3 中将 [UInt8] 数组复制到 C 指针?

如何从 C 中将新的字符串元素附加到 Swift 中的数组

如何在 ios 中将变量从 javascript 传递到目标 C 和目标 C 到 Javascript

如何在 Swift 中将十六进制字符串转换为 CString?

在 Swift 中将字典转换为 JSON

在 Swift 中将字典转换为 JSON