首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ios与js的交互

iOS 与 JS 的交互主要通过 WKWebView 实现。

基础概念: WKWebView 是苹果在 iOS 8 中引入的一个用于在 iOS 应用中显示网页内容的控件。

相关优势:

  • 性能较好,相比旧的 UIWebView 资源消耗更少。
  • 提供了更现代的网页渲染和交互能力。

类型:

  • JavaScript 调用 iOS 方法:通过 WKScriptMessageHandler 协议实现。
  • iOS 调用 JavaScript 方法:使用 evaluateJavaScript 方法。

应用场景:

  • 在 iOS 应用中嵌入网页,并实现网页与原生功能的交互,例如获取用户信息、调用支付功能等。

示例代码:

JavaScript 调用 iOS 方法:

代码语言:txt
复制
import WebKit

class ViewController: UIViewController, WKScriptMessageHandler {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let webViewConfiguration = WKWebViewConfiguration()
        let userContentController = WKUserContentController()
        userContentController.add(self, name: "nativeHandler")
        webViewConfiguration.userContentController = userContentController
        
        let webView = WKWebView(frame: self.view.frame, configuration: webViewConfiguration)
        self.view.addSubview(webView)
        
        if let url = URL(string: "https://your-web-page.com") {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
    
    func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
        if message.name == "nativeHandler", let messageBody = message.body as? String {
            print("Received message from JavaScript: \(messageBody)")
        }
    }
}

对应的 JavaScript 代码:

代码语言:txt
复制
window.webkit.messageHandlers.nativeHandler.postMessage('Hello from JavaScript');

iOS 调用 JavaScript 方法:

代码语言:txt
复制
webView.evaluateJavaScript("document.title") { (result, error) in
    if let title = result as? String {
        print("Page title: \(title)")
    }
}

常见问题及解决方法:

  • 交互不成功:检查 WKWebView 的配置是否正确,包括 WKScriptMessageHandler 的注册名称是否匹配。
  • 数据格式错误:确保 JavaScript 传递给 iOS 的数据格式和 iOS 期望的格式一致。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS与JS的交互

iOS和JS的交互看似两个问题,其实要解决的问题只有一个,那就是JS如何调用native方法。...= NSNotFound) { /* 1.检测到链接中包含有特殊字段,客户端要接受响应并做后续处理这就相当于js调起了iOS, 2.在真实的使用时,客户端需要和...h5协调,双方需要统一监听的字段 3.参数问题:如果此时的交互需要传递参数,参数也可以放在链接里,同样通过识别字符串的方法来获取 */ //第二步:拿到链接字符串的后续部分...,JS可以直接用oc方法名来调用oc方法,这样就类似于安卓的addJavaScriptInterface方法,在使用此方法时仍然要导入JavaScriptCore //第一步:创建一个用与JS交互的类JSHandler...继承与NSObject //在类中声明一个遵守JSExport的协议,并且使JSHandler实现这个新的协议 @protocolJSHandlerProtocol //单参数方法

4.1K70
  • iOS小技能:WKWebView与JS的交互

    前言 由于目前UIWebView 已经被抛弃了,因此推荐使用WKWebView的WKScriptMessageHandler实现iOS与JS交互 WKWebView是Apple在iOS8推出的Webkit...框架中的负责网页的渲染与展示的类,相比UIWebView速度更快,占用内存更少,支持更多的HTML特性 I JS调用iOS 使用例子:点击页面图片,调用iOS方法进行图片放大显示 1.1 JS代码: window.webkit.messageHandlers.openImage.postMessage...但只有在整个webView加载完成之后调用此方法才会有响应 2.1 执行JS iOS使用WKWebView的-evaluateJavaScript:completionHandler:方法执行拼接好的JS...see also iOS利用JSExport协议实现与JS的交互 & android 和js的交互 https://blog.csdn.net/z929118967/article/details/77963082...UIProcess进程:主要负责与 WebContent 进行交互,与 APP 在同一进程中,可以进行 WebView 的功能配置,并接收来自 WebContent 进程的各类消息,配合业务代码执行任务的决策

    7.3K30

    iOS开发中OC与JS交互(UIWebView)

    https://blog.csdn.net/u010105969/article/details/53189934 之前虽然做过OC与JS交互,但都是比较简单的效果:点击网页中的图片,然后进行图片浏览...现在对OC与JS交互这块也不是很清楚,今天只是把之前的代码贴过来以便今后更好地理解OC与JS的交互。 首先需要往网页中注入JS。注入JS的工作是后台做的。...可好像安卓和iOS还是有区别的,因为之前安卓那边可以实现与JS的交互,而我这边却不能。后台后台修改了代码,我这边也就可以进行交互了。...                                           } Objective-C和JavaScript交互的那些事...附上利用WKWebView加载网页OC与JS的交互的地址: http://mp.blog.csdn.net/postedit/53541088

    3.9K30

    iOS iOS与html进行交互

    然后点击下一页的按钮 通过js的响应显示另一个网页          最后通过下一页的按钮可以返回到首页。     本文仅仅是h5跟ios 的交互的入门 所以没有做细致的描述。...首先先说一下思路:我的项目中是那样的:首先h5从后台拿到数据,然后我请求h5的界面,然后通过h5的按钮进行选择,通过ios控制按钮到那个界面。 这个小demo不涉及数据传输,只是界面的交互。...简单的实现了交互。...2.允许js的Nitro库加载并使用(uivieqview中限制) 3.支持更多的html5特性 4.高达60fps的滚动刷新频率以及内置手势 5.将uiviewviewdelegate与uiwenview...developer.apple.com/reference/webkit) 下边开始讲使用了哦 准备工作: 1.设置oc代码 2.设置html代码 3.运行   oc代码: // // ViewController.m // OC与JS

    2.4K100

    Java与js的交互

    在android的开发过程中,有很多时候需要用到本地java代码和javascript进行交互。...android对交互进行了很好的封装,在开发中我们可以很简单的用java代码调用webview中的js,也可以用webview中的js来调用本地的java代码,这样我们可以实现很多原来做不了的功能,比如点击网页上的电话号码后...废话不多说,这次教程的目标如下 android 中的java代码调用webview里面的js脚本 webview中的js脚本调用本地的java代码 java调用js并传递参数 js调用java并传递参数...js并传递参数 只需要在待用js函数的时候加入参数即可,下面是传递一个参数的情况,需要多个参数的时候自己拼接及行了,注意str类型在传递的时候参数要用单引号括起来 mWebView.loadUrl("...javascript:test('" + aa+ "')"); //aa是js的函数test()的参数 功能四 js调用java函数并传参,java函数正常书写,在js脚本中调用的时候稍加注意 然后在

    5K90

    UIWebView与JS的交互

    Github上的WebViewJavascriptBridge 这个用于UIWebView/WebViews和JS交互的封装库。 看sample的时候我容易被各种回调搞晕,我们先看代码。...中,交互的方式只有两种:send 和 callHandle,JS和OC都有这两个方法,所以对应的四种关系是: ?...这个例子展现了一个完整的过程,基本涉及了JS和OC的各种交互包括OC调用JS、JS调用OC等。如果你有其它的业务需求,也基本按照这个流程就可以依样画葫芦了,唯一不同的也就是业务逻辑了。...选择控制台,你就可以看到久违的调试窗口以及JS的console.log了。 ? 以上就是使用 WebViewJavascriptBridge 进行UIWebView与JS的深度交互的例子。...Node.JS都可以写服务器了,React Native都可以开发iOS了。学无止境,iOS应该先搞定OC和Swift再去搞前端。 参考:UIWebView与JS的深度交互

    3.7K20

    WebView与js交互

    PS:大家都知道现在一个安卓项目里面有一些比较悬的画面,比如说一个炫酷的导航页,或者抽奖大转盘等,这些可以用安卓自身的知识来实现,也可以用JS来实现这些动画,然后安卓直接拿来用,这期间也是免不了有一些交互...,今天这篇文章就是让大家知道,怎么使用安卓与html联动,并且实现交互,这就用到了webview,webview可以嵌入很多页面,比如说webview.loadUrl("http://www.baidu.com...而且webview还可以实现网页回退,但是问题来了,在引进来的网页我们怎么控制呢,你点击百度是百度页面所发生的变化,都是百度页面本身的功能,接下里,咱们就看看怎么在安卓Activity中写控制html变化的方法...com.android.htmlfileprovider/sdcard/test.html"); // webview.addJavascriptInterface(this,"android");//添加js... 这是测试版本js与android交互 <!

    14.1K70

    JS与Native交互

    混合式开发1:(离线包,所有模块都存放在App的包中) 将服务器的资源文件(CSS/JS/Html),存放到Android 的 assets资源目录下或者本地SD卡都行的, 在WebView 中, 首先开启支持...== JS与Native进行交互 好多资源都有介绍,这里不做过多介绍!...---- 混合式开发3:(WebView读取本地资源JS文件) 也是我所希望的,因为我不想那么麻烦还需要去服务器对比资源以及一系列的问题,我只想简简单单的在webview中打开的页面,直接就可以拿到App...的本地资源JS库,这样既可以减少网络的请求,也是基于网络不佳性能优化的一部分,不过另说的话,如果实在是想更新新的资源,就得进行差分对比进行更新下载最新资源包了!.../js/index2.js"); view.loadUrl("javascript:" + jsContent); view.loadUrl

    3.8K20

    webview与js的相互交互

    那么我们需要给这个点击事件加上相应的js函数,让点击事件调用的js函数来调用我们提前准备好的java函数,等我们捕获到图片的url剩下的就好处理了。...关键点就是给普通的html注入我们的js函数,让图片能够响应点击并调用js函数,在通过js函数来调用我们的java函数。...听起来好像有点绕,不过也不难,下面我们用代码实现下 对java和js交互还不熟悉的同学,请参照前面的文章 http://blog.csdn.net/wangtingshuai/article/details...        contentWebView.loadUrl("http://www.weim.me/12408.html");   // 添加js交互接口类,并起别名 imagelistner...函数监听 private void addImageClickListner() {   // 这段js函数的功能就是,遍历所有的img几点,并添加onclick函数,函数的功能是在图片点击的时候调用本地

    2.7K90
    领券