關于js和swift交互的理解(一)

這幾天一直在研究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交互的理解(二)???

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容