swift-初探webView与JS交互
公司接下来的项目需要用swift内嵌h5来实现, 以前没有做过swift项目, 现在慢慢将所学的一点一滴记录一下 一个是怕自己忘了- =, 再就是希望大家看到能帮助我哈哈哈
前几天想要直接用swift上手- =发现连初始化什么的都给忘记了, 又乖乖回去先用OC简单的做了一个webView的界面
效果如下:

接下来, 我就一点点的把OC的代码用swift编写了
import UIKit
//要导入JavaScriptCore.framework库
import JavaScriptCore
//在此签订UIWebViewDelegate协议
class ViewController: UIViewController, UIWebViewDelegate {
//输入框
var textFiled = UITextField.init()
var webView = UIWebView.init()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
//初始化textfield
textFiled.frame = CGRectMake(20, 40, 260, 30)
textFiled.borderStyle = .Bezel
textFiled.clearButtonMode = .WhileEditing
textFiled.backgroundColor = UIColor.whiteColor()
self.view.addSubview(textFiled)
//开始运行btn
let btn = UIButton.init(frame: CGRectMake(290, 40, 30, 30))
btn.setTitle("GO", forState: UIControlState.Normal)
btn.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
btn.addTarget(self, action: #selector(ViewController.btnAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(btn)
//后退btn
let backBtn = UIButton.init(frame: CGRectMake(btn.frame.origin.x + 40, btn.frame.origin.y, 30, 30))
backBtn.setTitle("<", forState: UIControlState.Normal)
backBtn.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
backBtn.addTarget(self, action: #selector(ViewController.backBtnAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(backBtn)
//前进btn
let forwardBtn = UIButton.init(frame: CGRectMake(backBtn.frame.origin.x + 40, backBtn.frame.origin.y, 30, 30))
forwardBtn.setTitle(">", forState: UIControlState.Normal)
forwardBtn.setTitleColor(UIColor.blueColor(), forState: UIControlState.Normal)
forwardBtn.addTarget(self, action: #selector(ViewController.forwardBtnAction(_:)), forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(forwardBtn)
webView.frame = CGRectMake(0, 80, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - 80)
webView.backgroundColor = UIColor.lightGrayColor()
self.view.addSubview(webView)
//设置代理(不要忘记!如果不设置就无法调用webView的代理方法)
webView.delegate = self
}
/**
* parameters就是参数,return type是返回类型
func <#name#>(<#parameters#>) -> <#return type#> {
<#function body#>
}
*/
func btnAction(btn:UIButton){
//加载textfield中的网址
let request = NSURLRequest.init(URL: NSURL.init(string: "http://" + textFiled.text!)!)
webView.loadRequest(request)
}
func backBtnAction(backBtn:UIButton) {
webView.goBack()
}
func forwardBtnAction(forwardBtn:UIButton) {
webView.goForward()
}
/**
*网页加载完成调用此方法
*/
func webViewDidFinishLoad(webView: UIWebView) {
//调用提示框方法
setAlertShow()
}
//显示提示框
func setAlertShow() {
let jsString = String(format:"alert(123)")
print(jsString)
//交互
webView.stringByEvaluatingJavaScriptFromString(jsString)
}
运行效果如下:

swift版webView.gif
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!