這幾天一直在研究js和swift的交互期升,發(fā)現(xiàn)里面還是有一些東西可以記載下來,或者幫助后來人烙样,閑話少說,下面開始:
總起來說就2種不同的交互方式:
1.swift調(diào)用js
2.js調(diào)用swift代碼
這篇文章主要說swift調(diào)用js
1.利用js修改html頁(yè)面蕊肥,這也可以算作一種swift調(diào)用js
let header = "document.getElementById('header').remove()"
webView.stringByEvaluatingJavaScript(from: header)
還可以利用下面的代碼來改變頁(yè)面的標(biāo)題
self.title = webView.stringByEvaluatingJavaScript(from: "document.title")
2.還有一種調(diào)用js里的方法
JavaScriptCore是蘋果在iOS7時(shí)新推出用以實(shí)現(xiàn)JS和iOS代碼交互的框架
JSContext是JS的執(zhí)行環(huán)境谒获。
JSValue是Swift或者OC與JS交互的中間媒體,可以轉(zhuǎn)化為Swift對(duì)? ? 象或者OC對(duì)象壁却,也可以獲取JS對(duì)象或方法批狱。
JSExport是Swift或者OC與JS交互的協(xié)議,構(gòu)造一個(gè)類展东,遵循JSExport協(xié)議赔硫,實(shí)現(xiàn)協(xié)議的方法和初始化協(xié)議的屬性,然后把Swift或OC對(duì)象與JS對(duì)象關(guān)聯(lián)盐肃,我們就可以在JS環(huán)境下使用關(guān)聯(lián)的對(duì)象調(diào)用之前實(shí)現(xiàn)的協(xié)議的方法或取得屬性值或修改屬性值爪膊。
JSManagedValue:JSValue的內(nèi)存管理器。
JSVirtualMachine:JSVirtualMachine為JavaScript的運(yùn)行提供了底層資源.
//獲取js的運(yùn)行環(huán)境JSContext
let context = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext
//獲取js里的goGroup方法JSValue(注意:這里獲得方法只能是js里公有的方法砸王,私有方法獲取不到惊完,因?yàn)椴欢甹s搞了半天就是不明白為何調(diào)用不成功,后來?yè)Q了一個(gè)方法就可以了处硬,才明白原來只有共有的方法才能調(diào)用)
let jsFunc = context?.objectForKeyedSubscript("goGroup")
//執(zhí)行js里的方法小槐,"10432"是里面的傳遞的參數(shù)
jsFunc?.call(withArguments: ["10432"])
接下來我會(huì)在寫一篇文章交互二,寫的是js調(diào)用swift荷辕,文章地址:關(guān)于js和swift交互的理解(二)???