ios原聲js交互(ios原生與js交互的原理是什麼)

本文目錄一覽:

iOS – OC 與 JS 交互六種方式總結

在 APP 中,免不了與 H5頁面打交道,所以掌握 與 JS 交互就顯的至關重要,本文總結了常見的與 JS 交互方式。

注意事項

在 OC 原生中

在 html 文件中

早期的JS與原生交互的開源庫很多都是用得這種方式來實現的,例如:PhoneGap、 WebViewJavascriptBridge 。

效果圖

使用WKNavigationDelegate中的代理方法,攔截自定義的 URL 來實現 JS 調用 OC 方法。

注意點

關於如何區分執行不同的OC 方法,也與UIWebView的處理方式一樣,通過URL 的host 來區分執行不同的方法:

JS 調用OC 方法後,有的操作可能需要將結果返回給JS。這時候就是OC 調用JS 方法的場景。

WKWebView 提供了一個新的方法 evaluateJavaScript:completionHandler: ,實現OC 調用JS 等場景。

注意點

運行結果

在iOS 7之後,apple添加了一個新的庫JavaScriptCore,用來做JS交互,因此JS與原生OC交互也變得簡單了許多。

首先導入JavaScriptCore庫, 然後在OC中獲取JS的上下文。

再然後定義好JS需要調用的方法,例如JS要調用share方法:

則可以在UIWebView加載url完成後,在其代理方法中添加要調用的share方法:

OC 調用 JS 方法有多種,首先介紹使用JavaScriptCore框架的方式。

使用JSContext 的方法 -evaluateScript ,可以實現 OC 調用 JS 方法

效果圖

使用WKWebView的時候,如果想要實現JS調用OC方法,除了攔截URL之外,還有一種簡單的方式。那就是利用WKWebView的新特性MessageHandler來實現JS調用原生方法。

創建 WKWebViewConfiguration 對象,配置各個API對應的MessageHandler。

然後在界面即將顯示的時候添加MessageHandler

需要注意的是addScriptMessageHandler很容易引起循環引用,導致控制器無法被釋放,所以需要移除MessageHandler

這裡實現了兩個協議 WKUIDelegate,WKScriptMessageHandler , WKUIDelegate 是因為我在JS中彈出了alert 。 WKScriptMessageHandler 是因為我們要處理JS調用OC方法的請求。

WKScriptMessage 有兩個關鍵屬性 name 和 body 。

因為我們給每一個OC 方法取了一個name,那麼我們就可以根據name 來區分執行不同的方法。body 中存着JS 要給OC 傳的參數。

關於參數body 的解析,我就舉一個body中放字典的例子,其他的稍後可以看demo。

解析JS 調用OC 實現分享的參數:

message.boby 就是JS 里傳過來的參數。我們不同的方法先做一下容錯性判斷。然後正常取值就可以了。

下面只列舉一個shareClick()方法,其他看Demo

這裡使用WKWebView 實現OC 調用JS方法與之前說的文章一樣,通過

– evaluateJavaScript:completionHandler:

效果圖如下圖所示

詳情看下面文章鏈接

iOS下 JS 與 OC 互相調用(五) – UIWebView+WebViewJavascriptBridge

詳情看下面文章鏈接

iOS下 JS 與 OC 互相調用(六) – WKWebView+WKWebViewJavascriptBridge

iOS下 JS 與OC 互相調用(一) – UIWebView 攔截 URL

iOS下 JS 與OC 互相調用(二) – JavaScriptCore

iOS 下 JS 與 OC 互相調用(三) – WKWebView 攔截 URL

iOS下JS與OC互相調用(四)-MessageHandler

iOS下 JS 與 OC 互相調用(五) – UIWebView+WebViewJavascriptBridge

iOS下 JS 與 OC 互相調用(六) – WKWebView+WKWebViewJavascriptBridge

JS和IOS進行交互

如果想不修改js就直接調用OC是不可能的

WebViewJavascriptBridge組件是相對比較完整的解決方案

iOS WKWebView JS 與 原生交互小結

目前iOS項目中 Webview 幾乎都會用到,iOS 8 之前使用UIWebView,iOS 8 之後 Apple 就不推薦使用了,目前已經放棄了,如果項目中存在就無法上架了,需要轉為WKWebView了,說實話 UIWebView 是有性能上的缺陷,內存優化不夠友好等,但是不得不說這是老的iOS開發人員用的最熟練熟悉的了,用起來得心應手。非迫不得已還真不願轉到WKWebView。好吧,既然已經這樣了,又何必苦苦單戀一支花呢?

看了網上教程很多,自己使用小結一下,簡單易用,本文適用於菜鳥級開發,廢話不說了,

最主要的方法:發送消息

注意:對象名和方法名jumpUserProtocol名字的一致,參數可以是常用的NSArray,NSDictionary等類型,先說下在這個Demo中其實沒用上,用的方法名判斷的。

注意: addScriptMessageHandler

name為方法名 ,和JS 中的保持一致,添加腳本,相當於給Webview添加一個監聽,有這個功能來處理JS。

在WKScriptMessageHandler代理方法中處理回調,實現自己的邏輯。

上面就是JS調用OC原生實現。

這個其實很簡單,就一個方法:

iOS中WkWebView與js交互

1、初始化wkwebview

2、獲取js返回的信息

3、原生調用js方法

4、攔截url(可在此方法中實現判斷url執行相應的oc方法):js會嘗試加載某個URL,客戶端在加載前攔截這個URL,通過解析這個URL識別它的內容,調用相應的原生方法,並阻止瀏覽器加載這個URL

原生APP中js怎樣與Android和ios進行交互

Android的webview是基於webkit內核的,webview中集成了js與java互調的接口函數,通過addJavas criptInterface方法,可以將Java的類註冊進webkit,給網頁上的js進行調用,而且還可以通過loadUrl方法是給webkit傳遞一個URL,供瀏覽器來進行解析,實現Java和js交互。要想運行網頁上的js腳本,webview必須設置支持Javas cript。Java代碼1mWebview.getSettings().setJavas criptEnabled(true);然後是設置webview要加載的網頁:web的網頁:webView.loadUrl(“”);本地的網頁:webView.loadUrl(“”); //本地的存放在:assets文件夾中webview做完基本的初始化後我們還要要給它,加進一個回調的代理類Javas criptInterface,並給它一個調用的名稱:ncpJava代碼1mWebView.addJavas criptInterface(new Javas criptInterface(),”ncp”);Javas criptInterface可以是一個普通的Java類,類實現的方法,均可被js回調:Java代碼final class Javas criptInterface {public int callOnJs() {return 1000;}public void callOnJs2(String mode) {//TODO}}Java要調用js的方法,只需知道js的方法名稱即可:Java代碼1mWebView.loadUrl(“javas cript:onSaveCallback()”);js 這邊就更簡單:Js代碼window.onload = function(){document.getElementById(‘btn_1’).addEventListener(‘click’, onBtnClick, false);var _int_value = window.ncp.callOnJs();alert(“get int from java:” + _int_value );}function onBtnClick() {window.ncp.callOnJs2(“click”);}

原創文章,作者:O2U2F,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/128566.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
O2U2F的頭像O2U2F
上一篇 2024-10-03 23:25
下一篇 2024-10-03 23:25

相關推薦

  • Harris角點檢測算法原理與實現

    本文將從多個方面對Harris角點檢測算法進行詳細的闡述,包括算法原理、實現步驟、代碼實現等。 一、Harris角點檢測算法原理 Harris角點檢測算法是一種經典的計算機視覺算法…

    編程 2025-04-29
  • 瘦臉算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉算法 Python 實現的原理和方法,包括該算法的意義、流程、代碼實現、優化等內容。 一、算法意義 隨着科技的發展,瘦臉算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • 神經網絡BP算法原理

    本文將從多個方面對神經網絡BP算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP算法簡介 BP算法是一種常用的神經網絡訓練算法,其全稱為反向傳播算法。BP算法的基本思想是通過正…

    編程 2025-04-29
  • GloVe詞向量:從原理到應用

    本文將從多個方面對GloVe詞向量進行詳細的闡述,包括其原理、優缺點、應用以及代碼實現。如果你對詞向量感興趣,那麼這篇文章將會是一次很好的學習體驗。 一、原理 GloVe(Glob…

    編程 2025-04-27
  • 編譯原理語法分析思維導圖

    本文將從以下幾個方面詳細闡述編譯原理語法分析思維導圖: 一、語法分析介紹 1.1 語法分析的定義 語法分析是編譯器中將輸入的字符流轉換成抽象語法樹的一個過程。該過程的目的是確保輸入…

    編程 2025-04-27
  • iOS開發如何添加權限

    在iOS開發中,為了保護用戶的隱私和安全,應用程序可能需要請求一些權限。 一、請求應用程序權限 應用程序不得在用戶未給予許可的情況下獲取用戶數據。許多iOS系統功能都需要獲得用戶的…

    編程 2025-04-27
  • uniapp ios打包詳解

    一、環境搭建 首先需要安裝Xcode,並在Xcode中登錄自己的Apple ID,開啟自己的開發者賬戶。 接着,需要在uniapp項目中配置簽名證書和描述文件。步驟如下: 在Xco…

    編程 2025-04-25
  • Python字典底層原理用法介紹

    本文將以Python字典底層原理為中心,從多個方面詳細闡述。字典是Python語言的重要組成部分,具有非常強大的功能,掌握其底層原理對於學習和使用Python將是非常有幫助的。 一…

    編程 2025-04-25
  • Grep 精準匹配:探究匹配原理和常見應用

    一、什麼是 Grep 精準匹配 Grep 是一款在 Linux 系統下常用的文本搜索和處理工具,精準匹配是它最常用的一個功能。Grep 精準匹配是指在一個文本文件中查找與指定模式完…

    編程 2025-04-25
  • 深入探討馮諾依曼原理

    一、原理概述 馮諾依曼原理,又稱“存儲程序控制原理”,是指計算機的程序和數據都存儲在同一個存儲器中,並且通過一個統一的總線來傳輸數據。這個原理的提出,是計算機科學發展中的重大進展,…

    編程 2025-04-25

發表回復

登錄後才能評論