webview跟html通信的原理,1.iOS: webView與html的交互

摘要:

由于最近的項目中大部分功能需要 iOS 原生端與 html 進行交互才能完美實現,所以對 iOS 與 html 的交互方式進行了學習,這篇文章主要介紹 WebViewJavascriptBridge 框架的使用.至于原生的 JavaScriptCore.framework 就不多介紹了,同時在這里推薦一個比較好的博客.http://blog.csdn.net/baihuaxiu123/article/details/51674726

1.引入 webViewJavaScriptBridge 框架

1>通過cocoaPods

`pod 'WebViewJavascriptBridge', '~> 5.0'`

2>手動導入

直接拖到項目中,

3>框架介紹1.github地址:https://github.com/marcuswestin/WebViewJavascriptBridge

2.在把框架下載下來之后,里面會有一個 demo, 找到WebViewJavascriptBridge文件夾,里面共有8個文件,4個. h 以及對應的. m 文件,然后根據你項目中使用的是webView 還是WKWebView進行選擇相應的框架.

0c255336f84b

框架文件

2.引入頭文件

我當前的項目中使用的是 webView, 因此在創建webView 的界面引入的是#import"WebViewJavascriptBridge.h.

0c255336f84b

導入相應頭文件

3.與 html 建立橋接

iOS 與 html建立橋接并不是僅僅是前端或者是原生端某一端處理就能解決的,必須要兩端協作完成才行(一定要跟前端大哥處好關系!) 下面這些操作都是固定的,直接粘上去就行。

1>聲明WebViewJavascriptBridge屬性,這也就是我們所需要的橋,操作全靠它

0c255336f84b

創建橋接

2>OC 端進行架橋

0c255336f84b

建立橋接

從代碼我們可以看出,這一步是讓 webView 與 html 進行橋接,但是橋接不可能無緣無故就能搭建成功,所以還要在 html 的 js 上還要進行一步操作。

3>前端 js 需要寫的東西

0c255336f84b

前端橋接方法聲明

在 js 中,這個是對setupWebViewJavascriptBridge(callback)這個方法進行一個聲明 ,這個也是固定的。如果要進行交互,一定要寫的東西,直接將其粘貼在js 代碼中就行。要交互的內容,要寫在 js 相應的方法實現中,這個不需要我們 iOS 端來寫,這個是 web 端進行書寫的.

0c255336f84b

橋接后要進行的操作

4.iOS 端與 html 端互相的方法調用

使用此框架, iOS 與 html 交互的基本方法就是通過 registerHandler 和 callHandler兩個方法進行實現的。OC端如果需要調用 html 中的方法,那么js 上需要注冊方法(registerHandler),OC端需要進行 callHandler,只要對應上 handler名就能實現聯通。

1>js 調用 OC 方法

OC操作:

0c255336f84b

iOS 注冊 handler

注冊方法時,兩端一定要約定好 handler 名,因為這是進行搭橋識別的唯一途徑,相當于一個 identity,js端只需要對應上相應的handler 名就行,這里的 handler 名是"jsCallIosBoard".

js 操作:

0c255336f84b

js 在 setup方法中進行 callHandler

此時 js 中的畫筆$(".pen,.page4RSmallBi")被點擊后,就會調用OC端中相應的方法.我這里是彈入了畫板界面

2>OC 調用 js方法

和前面的道理相同,只需要在 js 中注冊 handler,OC 端進行 callhandler 就可以了

js 操作:

0c255336f84b

js 在 setup 方法中進行注冊

此時約定的 handler名是"jsCallIosBoard1"

OC端操作:

0c255336f84b

ios 端進行callHandler

根據 handler 名將數據傳到前端,用于顯示.

5.注意點

1> ? js 中所有registerHandler 和 callHandler 方法必須寫在setupWebViewJavascriptBridge(function (bridge)的實現方法中,否則沒有效果。

2> ? handler 名一定要是唯一的.

3> ? 在 registerhandler/callHandler 的 block 方法中,回調是在建橋后, callHandler /registerHandler成功之后立馬就會進行回調。 所有如果工程中有傳值需要注意下面這種情況:被調用的方法需要一定時間的延遲,才能得出結果,因為這個 block 主要是用來反饋搭橋是否成功,會被立刻調用(我的項目中, js 調用了 oc 的畫板,在畫板繪畫后傳到 js 中,使用回調是不行的,后來又從新注冊一個用來專門傳圖片地址的方法)

4> ?官方給的 demo 中, js 是直接寫在 html 中的,而平常的開發中,前端大多數時候都是都是把 js 直接抽取出來,創建一個 js 文件,然后去引用,這兩種性質是相同的,所有不要詫異,建議最好能跟前端學習一下 html, 并不難.

6.總結

iOS 與 html 進行交互的方法有很多種,這里說的是比較簡單的一種,能在最快的時間內進行交互,不過最好還是能對橋接的原理進行了解,這樣有助于開發,畢竟再好的第三方,也不如原生的好用(誰也不知道啥時候第三方就不能用了).

后言

互聯網時代的今天,我們都是站在巨人的肩膀上看著這個世界,共勉!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539343.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HDFS Federation(HDFS 聯盟)介紹

1. 當前HDFS架構和功能概述 我們先回顧一下HDFS功能。HDFS實際上具有兩個功能:命名空間管理(Namespace management)和塊/存儲管理服務(block/storage management)。 1.1 命名空間管理 HDFS的命名空間包含目錄、文件和塊…

linux java 部署 生產環境

2019獨角獸企業重金招聘Python工程師標準>>> 下載文件 首先進入網頁: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 點擊Accept License Agreement后選擇jdk-8u161-linux-x64.tar.gz,下載。 配置環…

c#位數不夠0補充完_C# 位數不足補零

C#位數不足補零:int i10;方法1:Console.WriteLine(i.ToString("D5"));方法2:Console.WriteLine(i.ToString().PadLeft(5,0));//推薦方法3:Console.WriteLine(i.ToString("00000"));在 C# 中可以對字符串使用 …

華為鴻蒙發布作文,華為鴻蒙OS定檔6月2日發布!MatePad Pro 2或同臺亮相:首發預裝...

5月25日一早,原華為EMUI官微就正式宣布更名為Harmony OS,并宣布將在6月2日晚20點召開鴻蒙操作系統及華為全場景新品發布會,屆時將正式發布鴻蒙OS正式版。據近期進行開發者測試的用戶反饋,鴻蒙OS目前已經非常完善,且穩定…

python如何根據數據畫散點圖_如何用python畫出樣本的散點圖?

用python畫樣本散點圖的方法: 數據(取第一列作為x,取第四列作為y)如下:實現代碼如下:import matplotlib.pyplot as plt import numpy as np # 定義畫散點圖的函數 def draw_scatter(n, s): ""&qu…

Hadoop RPC框架

原文:http://blog.csdn.net/thomas0yang/article/details/41211259 ---------------------------------------------------------------------------------------------- 1、RPC框架概述1.1 RPC(Remote Procedure Call Protocol)——遠程過程…

JavaSE基礎知識學習-----泛型

泛型 Java泛型是jdk1.5的一個新特性,jdk的性特性還包括:泛型,枚舉,裝箱和拆箱,可變參數等。這里先主要學習泛型。這些特性,現在都在廣泛的使用。因為現在使用IDE編寫代碼,都是標準的代碼提示&am…

centos7 校正linux系統時間_Linux系統:Centos7下搭建ClickHouse列式存儲數據庫

一、ClickHouse簡介1、基礎簡介Yandex開源的數據分析的數據庫,名字叫做ClickHouse,適合流式或批次入庫的時序數據。ClickHouse不應該被用作通用數據庫,而是作為超高性能的海量數據快速查詢的分布式實時處理平臺,在數據匯總查詢方面…

html調用js頁面顯示不出來了,JS代碼文件調用顯示亂碼,直接寫在html頁面的里可以調用,但是單獨放在js文件里不能調用...

最近遇到了一個很奇怪的問題,就是在HTML網頁代碼里直接寫JS代碼可以正常運行的代碼,使用JS文件調用就不行。var cities [ {"name" : "北京"}, {"name" : "上海"}, {"name" : "廣州"} ];$(…

水系圖一般在哪里找得到_城市供水系統防護體系的探索與思考

城市是一個國家或地區的政治、經濟和文化中心, 在戰爭中常常被選為重點打擊目標。1988年,時任美國空軍司令部副參謀長助理的約翰A. 沃登上校提出“五環”目標打擊理論,將 對敵打擊目標分為五個層,其中就將基礎設施列為第三層打擊目…

Hadoop webHDFS設置和使用說明

原文:http://blog.csdn.net/iloveyin/article/details/28264027 ---------------------------------------------------------------------------------------- 1.配置 namenode的hdfs-site.xml是必須將dfs.webhdfs.enabled屬性設置為true,否則就不能使…

CES 2017前瞻之AI:無人機依舊小巧,機器人主打家庭服務

再過2天,CES 2017就要開始了,根據這些已知曉的部分展商,我們也許能夠看到未來的一些趨勢。 還有2天,備受矚目的CES 2017(2017年國際消費類電子產品展覽會)就要拉開帷幕了。 每一年,CES上都會出…

ionic html5 上傳圖片,ionic4+angular7+cordova上傳圖片功能的實例代碼

前言ionic是一個垮平臺開發框架,可通過web技術開發出多平臺的應用。但只建議開發簡單應用。復雜的應用需要用到許多cordova插件,而cordova插件的更新或者移動平臺的更新很可能導致插件的不可用,維護升級成本較高。安裝插件安裝插件Image Pick…

HDFS體系結構

Namenode 是整個文件系統的管理節點。它維護著整個文件系統的文件目錄樹,文件/目錄的元信息metadate和每個文件對應的數據塊列表。 功能:接收用戶的操作請求。 metadate信息包括: 1、文件的owership和permission。 2、文件包含哪些block塊…

為什么要將html頁面和樣式表分離,0031 如何使用css文件對網頁內容和樣式進行分離...

原標題:0031 如何使用css文件對網頁內容和樣式進行分離上節課,學習了針對文字可以設置很多種樣式。這節課,學習如何將內容和樣式進行分離。上節課的課后練習1.將斜體字體效果去除2.將工作經歷和工作經驗(部分)這2行文字也做成簡介這行文字的效…

redis 關系數據庫怎么轉換 和_redis數據庫設計(轉)

閱讀目錄redis是什么redis就是一個存儲key-value鍵值對的倉庫,如何使用redis在于如何理解你需要設計的系統的E-R的模型,然后合理的規劃redis的數據庫結構場景我舉一個簡單的消息系統的例子,業務需求:服務器端發送消息給用戶E-R模型…

Hadoop Archives

介紹 時間: Hadoop Archives (HAR files)是在0.18.0版本中引入的。 作用: 將hdfs里的小文件打包成一個文件,相當于windows的zip,rar。Linux的 tar等壓縮文件。把多個文件打包一個文件。 意義: 它的出現就是為了緩…

js 判斷日期時間差

2019獨角獸企業重金招聘Python工程師標準>>> alert(GetDateDiff("2018-02-27 19:20:22","2018-02-27 09:20:22","hour"));function GetDateDiff(startTime, endTime, diffType) {//將xxxx-xx-xx的時間格式,轉換為 xxxx/xx…

python 圖形_Python圖形數據

CSGraph代表 壓縮稀疏圖 ,它著重于基于稀疏矩陣表示的快速圖算法。 圖表表示 首先,讓我們了解一個稀疏圖是什么以及它在圖表示中的作用。 什么是稀疏圖? 圖形只是節點的集合,它們之間有鏈接。圖表幾乎可以代表任何事物 - 社交網絡…

本地運行hadoop-Failed to locate the winutils binary in the hadoop binary path

轉自:http://www.cnblogs.com/zq-inlook/p/4386216.html 之前在mac上調試hadoop程序(mac之前配置過hadoop環境)一直都是正常的。因為工作需要,需要在windows上先調試該程序,然后再轉到linux下。程序運行的過程中&#…