OC與JS的簡單相互使用

今天看一下在Objective-C(以下簡稱OC)中使用JavaScript(以下簡稱js)代碼,以及JS中對OC代碼的調用。

在OC中使用js的場景是,手機端需要顯示一個網頁文件,網頁文件中嵌入的js代碼,我們想要通過OC代碼來處理或者多網頁進行操作。

OC中使用UIWebView控件來加載網頁請求。

通過webView加載一個網頁請求

1.OC調用JS

我們在OC中使用JS代碼一般是希望通過OC代碼對網頁上進行操作。這個操作相對比較簡單,只需要把原生的js代碼拿來執行就可以了。這里需要使用webView的一個方法。用它來執行js代碼

[self.webView stringByEvaluatingJavaScriptFromeString:@"js代碼"];

使用OC代碼在webView上彈出一個警告彈窗
這里是上述代碼執行后在網頁上 造成的效果

OC代碼調用js代碼就僅有這一種方法使用。如果你需要對網頁進行處理,可以把處理的js代碼現在上述代碼@“”里面 通過OC方法來觸發就可以了。

2.js調用OC

js調用OC的場景就是當我們在webView上點擊某個按鈕或者鏈接等我們需要OC來進行響應,比如打開一個新的控制器,彈出一個提示窗口等。

在webView上當我們點擊一個請求鏈接的時候webView回通知他的代理 并且把我們想要請求的地址傳過去。

這個是webView的代理方法 它需要返回一個BOOL值 告訴webView是否去加載我們的請求

在上面這個代理方法中我們可以攔截到我們的請求內容 request中會返回請求的信息。

我們實現的思路是 在html代碼中自定義協議。當我們在webView上觸發了自定義的協議請求時候我們在 webView的代理方法中進行攔截,然后判斷請求協議是不是我們自定義的。如果是那我們就攔截下來然后進行自定義的處理。這個時候我們就可以把webView上觸發的事件通過webView代理方法的攔截,把事件的響應交付給OC代碼來處理。

在index.html中自定義協議 dgyh:是自定義的schame
在webView上的顯示 為兩個可點擊的連接

當我們點擊其中的一個 顯示一個控制器的時候 webView的代理方法會接收到一個請求協議。我們通過攔截判斷如果是自定義的協議 就去執行準備好的OC方法 即可進行頁面的彈出控制器處理。

在webView的代理方法中處理攔截 然后執行準備好的OC方法

以上就是JS和OC的簡單相互使用。再復雜的操作也是可以通過這個基礎原理來實現的,如果您有更好的解決辦法或者處理思路,歡迎回復郵件zihanvip520@163.com.我期待著您的郵件。

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

推薦閱讀更多精彩內容