ios 中 webview 加载的html 怎么和ios代码交互

html-css06

ios 中 webview 加载的html 怎么和ios代码交互,第1张

 IOS中webview与JS交互的代码:

[webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script')"

"script.type = 'text/javascript'"

"script.text = \"function myFunction() { "

"var field = document.getElementsByName('word')[0]"

"field.value='测试'"

"document.forms[0].submit()"

"}\""

"document.getElementsByTagName('head')[0].appendChild(script)"]

[webView stringByEvaluatingJavaScriptFromString:@"myFunction()"]

上面的代码是把JS代码写入到html网页中,然后执行函数,实现JS中的功能。

通过 stringByEvaluatingJavaScriptFromString 函数,可以实现webview强大的交互功能。

//①ji与android交互

//js调用android方法

window.类.方法名称(参数1,参数2)

//android调用js方法(loginIn:方法名称,uname:参数)

//activity.loadUrl("javascript:loginIn('" + uname + "')")

//②js与ios交互

//js调用ios方法(objc:协议)

window.location.href='objc://方法名称|参数1|参数2'

//ios调用js方法:

同android

其中:android的activity如下:

@Override

public void onCreate(Bundle savedInstanceState) {

// setFullScreen(true)

Intent intent = new Intent(getApplicationContext(),

SplashActivity.class)

startActivity(intent)

super.onCreate(savedInstanceState)

super.init()

// Set by <content src="index.html" /> in config.xml

activity = this

// this.appView.setBackgroundResource(R.drawable.welcome)// 设置背景图片

//

// super.setIntegerProperty("splashscreen", R.drawable.welcome)

// 设置闪屏背景图片

// super.setBooleanProperty(name, value)

// super.loadUrl("这里是html页面的路径")

super.appView.addJavascriptInterface(new Fu(), "这里是类名(js中需要通过这个类名访问android方法)")

super.loadUrl(Config.getStartUrl())

// super.loadUrl("file:///android_asset/www/index.html")

// mController.openShare(activity, false)

// try {

// getToken()

// } catch (NoSuchAlgorithmException e) {

// // TODO Auto-generated catch block

// //e.printStackTrace()

// }

}

       在客户端项目中,同一个app会开发成两个版本,一个是安卓版本,一个IOS版本,公司必须有两个开发团队(一个安卓团队,一个IOS团队)来进行开发,这样一来,开发成本非常之高。所以,往往在实际项目-中,会嵌套很多H5页面,一个H5页面同时兼容安卓和IOS两个系统 ,这样一来,大大减少了开发成本,前端开发页面就必须和原生进行交互。

1. 页面开发      —— 前端开发人员将所有的页面按照移动webappp进行开发,做好不同屏幕的适配(宽度100%,视口为移动端视口 (快捷方式meta:vp  tap),字体适配rem单位,设置html根标签的font-size然后根据媒体查询判断设备屏幕大小进而设置html根标签的不同fontsize,去除移动端高亮显示;小图标要善于使用字体图标(常用的字体图标库有阿里巴巴矢量图),改变input标签的默认样式可以采用隐藏input,然后通过字体图标来控制前面的图标,就可以做成自己想要的图标效果)

2.前端页面部署 —— 设置好入口文件(原生一进来就进入的页面,命名为index.html),部署到对应的服务器上,通过网址就能够访问到页面,将网址给app客户端开发人员,他们将app配置好环境后讲页面嵌套在app中。

3.进行数据对接:两种对接方式(1).前端页面自己通过ajax去后台拉数据,然后自己在页面上使用再提交给后台。前提是原生需要将对应的设备号,加密方式,请求数据所需要的各种参数通过回调函数传递给H5页面,H5页面拿到这些数据后直接调后台的借口、获取到数据。(2).前端页面不用自己去后台拉取数据,而是通过回调函数,获取到原生app拉取的数据,前端页面将这些数据处理后又通过回调函数交给app,再又app发送给后台。两种调用的优劣比较:如果H5页面及数据不是很多,使用第二种方式比较合理,不用H5页面请求数据(不用封装请求,不用加密数据),不使用框架,大大减少了页面的大小,提高性能及用户体验。如果涉及到的前端页面非常多,数据交互比较复杂的话,就必须使用第一种对接方式了,app只需要将设备号,加密规则,参数传递给H5,H5根据页面需求自己向后台拉去和请求数据,直接交互,不再通过app进行转接,减小复杂程度。