這幾天一直在研究js和swift的交互,發(fā)現(xiàn)里面還是有一些東西可以記載下來,或者幫助后來人,閑話少說,下面開始:
總起來說就2種不同的交互方式:
1.swift調(diào)用js
2.js調(diào)用swift代碼
這篇文章主要說swift調(diào)用js
1.利用js修改html頁面,這也可以算作一種swift調(diào)用js
let header = "document.getElementById('header').remove()"
webView.stringByEvaluatingJavaScript(from: header)
還可以利用下面的代碼來改變頁面的標(biāo)題
self.title = webView.stringByEvaluatingJavaScript(from: "document.title")
2.還有一種調(diào)用js里的方法
JavaScriptCore是蘋果在iOS7時新推出用以實(shí)現(xiàn)JS和iOS代碼交互的框架
JSContext是JS的執(zhí)行環(huán)境。
JSValue是Swift或者OC與JS交互的中間媒體,可以轉(zhuǎn)化為Swift對? ? 象或者OC對象,也可以獲取JS對象或方法。
JSExport是Swift或者OC與JS交互的協(xié)議,構(gòu)造一個類,遵循JSExport協(xié)議,實(shí)現(xiàn)協(xié)議的方法和初始化協(xié)議的屬性,然后把Swift或OC對象與JS對象關(guān)聯(lián),我們就可以在JS環(huán)境下使用關(guān)聯(lián)的對象調(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)用不成功,后來換了一個方法就可以了,才明白原來只有共有的方法才能調(diào)用)
let jsFunc = context?.objectForKeyedSubscript("goGroup")
//執(zhí)行js里的方法,"10432"是里面的傳遞的參數(shù)
jsFunc?.call(withArguments: ["10432"])
接下來我會在寫一篇文章交互二,寫的是js調(diào)用swift,文章地址:關(guān)于js和swift交互的理解(二)???