baidu_35962618 2017-10-25 09:48 采纳率: 0%
浏览 725

swift 原生与h5二级页面交互

网上找的交互代码用webview加载的,我的一级是一个列表没问题,但是点击列表进入下一个页面,就获取不到模型“wangfangy”对象了,求大神指点一二!
self.jsContext = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext
let model = JSObjCModel()
model.controller = self
model.jsContext = self.jsContext
// 这一步是将SwiftJavaScriptModel模型注入到JS中,在JS就可以通过WebViewJavascriptBridge调用我们暴露的方法了。

    self.jsContext?.setObject(model, forKeyedSubscript: "wangfangy" as NSCopying & NSObjectProtocol)

    self.jsContext!.exceptionHandler = { (context, exception) in
        print("exception:", exception)
    }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 02:27
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用Web视图加载网页时,你需要确保你的代码能够正确地处理JavaScript和Web视图之间的通信。以下是一些可能有助于解决你遇到的问题的步骤:

    1. 初始化:首先,确保你在init方法中正确地设置了Web视图并初始化了webViewValueForKeyPath:
    let webViewController = WebViewController(webView: webView)
    
    1. 设置JavaScript上下文:创建一个JavaScript上下文,并将其设置为Web视图的主要框架。
    let jsContext = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext
    if let context = jsContext {
        context.setObject(self, forKeyedSubscript: "wangfangy" as NSCopying & NSObjectProtocol)
    }
    
    1. 注册事件监听器:为了响应用户操作(例如点击列表项),你需要注册一些事件监听器。这通常涉及创建一个新的JavaScript上下文,并使用它来触发特定的操作。
    let model = JSObjCModel()
    model.controller = self
    model.jsContext = jsContext!
    
    // 注册事件监听器
    webView.addEventTargetListener { event in
        switch event.name {
        case "click":
            // 在这里添加点击事件逻辑
            break
        default:
            // 处理其他事件
        }
    }
    
    1. 实现逻辑:现在,你可以开始编写用于处理点击事件、加载数据等的具体逻辑。注意,由于涉及到跨平台开发,可能需要考虑如何处理不同语言或环境中的错误。

    在这个例子中,我提供了一个基本的结构,包括如何初始化Web视图,设置JavaScript上下文以及注册事件监听器。具体的行为取决于你想要实现的功能。如果你能提供更多关于你的需求的信息,我可以为你提供更具体的帮助。

    评论

报告相同问题?