ios UIWebView与js的简单交互swift3版

简介: 在开发过程中,我们可能遇到ios代码与js交互的情况,本人第一次使用遇到了很多坑,这里纪录一下,方便自己,也方便需要的人。1.第一步先建一个接口(协议)并继承JSExport这里实现两个方法提供给js调用的方法importJavaScriptCo...

在开发过程中,我们可能遇到ios代码与js交互的情况,本人第一次使用遇到了很多坑,这里纪录一下,方便自己,也方便需要的人。

1.第一步先建一个接口(协议)并继承JSExport

这里实现两个方法提供给js调用的方法

importJavaScriptCore

@objcprotocolSwiftJavaScriptDelegate:JSExport{

funcshow()

funcshowAlert(_str:String,_msg:String)

}

2.第二步需要写一个类去实现上一步的接口(协议)(注意:1.这里必须要继承nsobject否则会报错,2.如果要传参数的话一定要写成

类似与 funcshowAlert(_str:String,_msg:String),_ str:String 这个“_”一定要加不然无法调用(调用无效果),在swift3.0中就这样,其他版本没有测试就不清楚了。

@objcclassSwiftJavaScriptModel:NSObject,SwiftJavaScriptDelegate{

funcshow() {

print("js调用我了")

}

funcshowAlert(_str:String,_msg:String){

print("js调用我了:",str,msg)

}

}

3.开始在控制器中测试

//

//ViewController.swift

//WEBJSTest

//

//Created by admin on 17/8/5.

//Copyright © 2017年tdin360. All rights reserved.

//

importUIKit

importWebKit

importJavaScriptCore

classViewController:UIViewController,UIWebViewDelegate{

varcontext:JSContext!

overridefuncviewDidLoad() {

super.viewDidLoad()

self.setupUI()

}

funcsetupUI( ) {

self.view.addSubview(webView)

leturl =Bundle.main.path(forResource:"index", ofType:"html")

self.webView.loadRequest(URLRequest(url:URL(string:url!)!))

self.webView.delegate=self

self.view.addSubview(btn)

}

lazyvarwebView:UIWebView={

letwebView =UIWebView(frame:self.view.bounds)

returnwebView

}()

//用于点击调用js的按钮

lazyvarbtn:UIButton={

letbtn =UIButton(frame:CGRect(x:0,y:300,width:100,height:40))

btn.backgroundColor=UIColor.blue

btn.setTitle("调用js", for: .normal)

btn.addTarget(self, action:#selector(onClick), for: .touchUpInside)

returnbtn

}()

//swift调用js

funconClick(){

letf =context?.objectForKeyedSubscript("swift")

_=f?.call(withArguments: [["name":"admin","pass":"fdsfds"]])

}

funcwebViewDidFinishLoad(_webView:UIWebView) {

letmodel =SwiftJavaScriptModel()

//获取context

context=self.webView.value(forKeyPath:"documentView.webView.mainFrame.javaScriptContext")as!JSContext

//这里注册一个标示给js访问

context.setObject(model, forKeyedSubscript:"model"as(NSCopying&NSObjectProtocol)!)

leturl =Bundle.main.url(forResource:"index", withExtension:"html")

context.evaluateScript(try?String(contentsOf: url!, encoding:String.Encoding.utf8))

context.exceptionHandler= {

(context, exception)in

print("exception错误@", exception ??"")

}

}

overridefuncdidReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

}

}


4.html代码

<html>

<meta charset="utf-8">

<title>ios js交互测试</title>

<head>

<script>

//这个提交给swift调用并传参数

 function swift(obj){

alert("swift调用我了"+obj["name"]+"--"+obj["pass"]);

            }

</script>

</head>

<body>

<button onclick="model.showAlert('参数1','参数2')">js调用swift有参的方法</button>

<button onclick="model.show()" >js调用swift无参数方法</button>

</body>

</html> 

整个过程就是这样的,这里贴了源码,如果遇到问题欢迎留言,有什么更好的方法欢迎一起交流。

目录
相关文章
|
10天前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
30 9
|
16天前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
32 4
|
1月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
16 1
【JavaScript】网页交互的灵魂舞者
|
23天前
|
安全 API Swift
探索iOS开发中的Swift语言之美
【10月更文挑战第23天】在数字时代的浪潮中,iOS开发如同一艘航船,而Swift语言则是推动这艘船前进的风帆。本文将带你领略Swift的独特魅力,从语法到设计哲学,再到实际应用案例,我们将一步步深入这个现代编程语言的世界。你将发现,Swift不仅仅是一种编程语言,它是苹果生态系统中的一个创新工具,它让iOS开发变得更加高效、安全和有趣。让我们一起启航,探索Swift的奥秘,感受编程的乐趣。
|
1月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
2月前
|
安全 Swift iOS开发
探索iOS开发之旅:Swift语言的魅力与挑战
【9月更文挑战第21天】在这篇文章中,我们将一起潜入iOS开发的海洋,探索Swift这门现代编程语言的独特之处。从简洁的语法到强大的功能,Swift旨在让开发者能够以更高效、更安全的方式构建应用程序。通过实际代码示例,我们会深入了解Swift如何简化复杂任务,并讨论它面临的挑战和未来的发展方向。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和知识。
46 4
|
2月前
|
安全 编译器 Swift
探索iOS开发之旅:Swift编程语言的魅力与挑战
【9月更文挑战第5天】在iOS应用开发的广阔天地中,Swift作为苹果官方推荐的编程语言,以其简洁、高效和安全的特点,成为了开发者的新宠。本文将带领你领略Swift语言的独特魅力,同时探讨在实际开发过程中可能遇到的挑战,以及如何克服这些挑战,成为一名优秀的iOS开发者。
|
2月前
|
设计模式 前端开发 Swift
探索iOS开发:Swift与Objective-C的较量
在这篇文章中,我们将深入探讨iOS开发的两大编程语言——Swift与Objective-C。我们将分析这两种语言的特性、优势和局限性,并讨论它们在现代iOS开发中的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和建议。
57 3
|
2月前
|
JavaScript 前端开发
JavaScript 与 DOM 交互
【9月更文挑战第01天】
30 2
|
3月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
39 0