這幾天一直在研究js和swift的交互,發現里面還是有一些東西可以記載下來,或者幫助后來人,閑話少說,下面開始:
總起來說就2種不同的交互方式:
1.swift調用js
2.js調用swift代碼
這篇文章主要說swift調用js
1.利用js修改html頁面,這也可以算作一種swift調用js
let header = "document.getElementById('header').remove()"
webView.stringByEvaluatingJavaScript(from: header)
還可以利用下面的代碼來改變頁面的標題
self.title = webView.stringByEvaluatingJavaScript(from: "document.title")
2.還有一種調用js里的方法
JavaScriptCore是蘋果在iOS7時新推出用以實現JS和iOS代碼交互的框架
JSContext是JS的執行環境。
JSValue是Swift或者OC與JS交互的中間媒體,可以轉化為Swift對? ? 象或者OC對象,也可以獲取JS對象或方法。
JSExport是Swift或者OC與JS交互的協議,構造一個類,遵循JSExport協議,實現協議的方法和初始化協議的屬性,然后把Swift或OC對象與JS對象關聯,我們就可以在JS環境下使用關聯的對象調用之前實現的協議的方法或取得屬性值或修改屬性值。
JSManagedValue:JSValue的內存管理器。
JSVirtualMachine:JSVirtualMachine為JavaScript的運行提供了底層資源.
//獲取js的運行環境JSContext
let context = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as? JSContext
//獲取js里的goGroup方法JSValue(注意:這里獲得方法只能是js里公有的方法,私有方法獲取不到,因為不懂js搞了半天就是不明白為何調用不成功,后來換了一個方法就可以了,才明白原來只有共有的方法才能調用)
let jsFunc = context?.objectForKeyedSubscript("goGroup")
//執行js里的方法,"10432"是里面的傳遞的參數
jsFunc?.call(withArguments: ["10432"])
接下來我會在寫一篇文章交互二,寫的是js調用swift,文章地址:關于js和swift交互的理解(二)???