【问题标题】:call methods on WKWebView from lldb从 lldb 调用 WKWebView 上的方法
【发布时间】:2020-05-31 07:37:29
【问题描述】:

当我调试我的应用程序以查找 webview 没有收到我的消息的原因时,我发现另一个 WkWebview(我们称之为 B)是在我现有的 webview (A) 之上创建的。因为我只引用了 A,所以我试图使用它的内存地址直接在 B 上评估 js。 在 lldb 中这样做的正确方法是什么?

基于this answer,我尝试过: settings set target.language swift e -- import WKWebview e -- let $webView = unsafeBitCast(0x13299e400, to:WKWebview.self)

为了调用 webView.evaluateJavaScript, 但 lldb 说:

let $webView = unsafeBitCast(0x13299e400, to:WKWebview.self)
               ^

error: <EXPR>:3:46: error: cannot convert value of type 'module<WKWebview>' to expected argument type 'U.Type'
let $webView = unsafeBitCast(0x13299e400, to:WKWebview.self)```

【问题讨论】:

  • 通过切换到lldb的objective-c模式可能更容易实现这一点:e -l objc -- [0x13299e400 evaluateJavaScript:@"your javascript code" completionHandler:nil]
  • @Kamil.S 我不得不进行一些调整,但它似乎确实有效。谢谢你的回答!
  • 请发布您的最终解决方案,作为未来读者的答案。

标签: ios objective-c swift lldb


【解决方案1】:

感谢@Kamil.S,我设法做到了。 完整的步骤是:

(lldb) e @import <WKWebview.h>
(lldb) e NSString *$js = <my javascript to evaluate>
(lldb) e (void)[(id)0x10504ea00 evaluateJavaScript:$js completionHandler:nil]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-12
    • 2016-06-22
    • 2015-10-25
    • 1970-01-01
    • 2021-03-31
    • 2012-04-10
    相关资源
    最近更新 更多