iOS與H5交互

前提:在iOS控制器中加載UIWebView,設置代理,遵守UIWebViewDelegate協議。

???

一、iOS調用JS方法

?? 通過iOS調用JS代碼實現起來比較方便直接調用UIWebView的方法- (nullable NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;

?? 1.查詢標簽

????? // 查詢標簽
????? NSString *str = @"var word = document.getElementById('word');"
???????????????????????????? @"alert(word.innerHTML)";
?? ?? [webView stringByEvaluatingJavaScriptFromString:str];

?? 2.為網頁添加標簽:

????? NSString *str = @"var img = document.createElement('img');"
????????????????????? "img.src = 'icon5.jpg';"
????????????????????? "img.width = 300;"
????????????????????? "img.heigth = 100;"
????????????????????? "document.body.appendChild(img);";
???? [webView stringByEvaluatingJavaScriptFromString:str];

?? 3.刪除網頁標簽:

????? // 刪除標簽
????? NSString *str1 = @"var word = document.getElementById('word');"
??????????????????????????????? @"word.remove();";
????? [webView stringByEvaluatingJavaScriptFromString:str1];

?? 4.更改標簽:

????? // 更改
????? NSString *str2 = @"var change = document.getElementsByClassName('change')[0];"
??????????????????????????????? "change.innerHTML = 'hello';";
????? NSString *result =? [webView stringByEvaluatingJavaScriptFromString:str2];

?

?? HTML端代碼:

???? <!DOCTYPE html>
???? <html lang="en">
???? <head>
??????????? <meta charset="UTF-8">
??????????? <title>iOS和H5交互</title>
???? </head>
???? <body>
??????????? <p id="word">6666666666</p>
??????????? <ul>
???????????????? <li class="change">111111</li>
???????????????? <li class="haha">222222</li>
???????????????? <li>333333</li>
???????????????? <li>444444</li>
??????????? </ul>
??????????? <input class="name" placeholder="請輸入密碼">
??????????? <button οnclick="buttonClick()">提交信息</button>
??? <script type="text/javascript">
??????????? alert('這個一個彈框');
??? </script>
??? </body>
??? </html>

二、JS調用iOS方法:

?? 1.第一種方法比較簡單,通過字符串的比對。這種方式iOS端代碼比較簡單,網頁加載完成后后臺需要重新定義網頁url,將移動端需要的參數拼接到url上返回,或者按照和后臺約定好的字段來進行字符串比對以達到調用iOS方法的目的。下面貼代碼。

???? oc代碼:(需要實現webView的協議)

???? // 攔截協議頭,調取系統攝像頭
???? #pragma mark UIWebViewDelegate
???? - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:??????????? (UIWebViewNavigationType)navigationType
??? {
??????? NSString *str = request.URL.absoluteString;
??????? if ([str containsString:@"wxd://"]) {
???????????? [self getImage];
???????? }
??????? return YES;
???? }

??? - (void)getImage
?? {
??????? if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { //調用相冊
??????????? //實例化控制器
??????????? UIImagePickerController *picker = [[UIImagePickerController alloc] init];
??????????? picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
??????????? picker.delegate = self;
??????????? // 是否有圖片選取框
??????????? picker.allowsEditing = YES;
?????? ? ?? [self presentViewController:picker animated:YES completion:nil];
??????? }
??? }
?? HTML端代碼:
?? <!DOCTYPE html>
?? <html lang="en">
? ? ? ? ? <head>
????????? <meta charset="UTF-8">
????????? <title>在html中調用oc的方法</title>
????????? </head>
????????? <body>
????????????????? <button οnclick="getImage()">訪問相冊</button>
????????? <script type="text/javascript">
????????????????? function getImage(){
??????????????????????? window.location.href = "wxd://getImage";
????????????????? }
????????? </script>
?? ? ? ?? </body>
?? </html>

?? 2.第二種方法,JS直接用oc方法名來調用oc方法,類似于安卓.addJavascriptInterface(new JsObject(), "Android")方法,頭文件需要導入#import <JavaScriptCore/JavaScriptCore.h>。

????? 首先創建一個繼承自NSObject的類,在這里我命名為JSTestObjext,.h代碼如下:

???? .m中實現協議方法,代碼如下:

? 之后在加載webView的控制器中調用:

到此為止,oc代碼就已經寫完了,我們只需告訴JS端使用testobject類,就可以調oc的方法了。下面附上JS調用的代碼:

到此公司里所使用的iOS與H5交互的方法就都寫在這里了。

使用第二種方法,<JavaScriptCore/JavaScriptCore.h>庫來實現交互遇到的問題,已經寫到了另一篇博客當中iOS與H5交互遇到的坑。

轉載于:https://www.cnblogs.com/wanxudong/p/5581367.html

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

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

相關文章

cocos2dx 3.x 蒙板 遮罩 點擊圓功能

//注冊觸摸EventListenerTouchOneByOne *listener EventListenerTouchOneByOne::create();listener->onTouchBegan CC_CALLBACK_2(HelloWorld::onTouchBegan,this);listener->onTouchMoved CC_CALLBACK_2(HelloWorld::onTouchMoved,this);listener->onTouchEnded …

markdownTest

MARKDOWNTEST 11111111111111有一種神奇的語言&#xff0c;它比html還簡單&#xff0c;它巧妙地將內容與格式整合在一起——它就是Markdown有一種神奇的語言&#xff0c;它比html還簡單&#xff0c;它巧妙地將內容與格式整合在一起——它就是Markdown 111111111111111222222222…

python模擬密碼有效性檢測功能_檢查密碼有效性(Django/Python)

我有一個非常小的Django應用程序&#xff0c;主要是為了學習。我使用的是Django提供的內置用戶模型。為了學習這個功能&#xff0c;我創建了一些頁面&#xff0c;這些頁面允許我創建和編輯用戶&#xff0c;而不必進入管理面板。在register頁面允許我非常容易地檢查密碼和電子郵…

教程:Hibernate,JPA –第1部分

這是關于使用Hibernate和JPA的教程的第一部分。 這部分是對JPA和Hibernate的介紹。 第二部分將研究使用Spring ORM組合Spring MVC應用程序以減少創建CRUD應用程序所需的代碼量。 為此&#xff0c;您需要熟悉Maven&#xff0c;JUnit&#xff0c;SQL和關系數據庫。 依存關系 首…

TCP、UDP套接字的數據傳輸

tcp發送數據&#xff1a; 1 #include <sys/types.h> 2 #include <socket.h> 3 ssize_t send(int sockfd,const void *msg,size_t len,int flags); 函數send只能對面向連接的套接字使用。參數sockfd為已經建立好連接的套接字描述符。參數msg指向待發送數據的緩沖區&…

Windows下用PIP安裝scipy出現no lapack/blas resources found

Windows下升級了pandas&#xff0c;但是發現scipy包隨后引用出錯&#xff0c;后來確認需重新安裝scipy&#xff0c; 在用PIP安裝scipy出現no lapack/blas resources found的錯誤&#xff0c;具體原因可參考 這里。 后來找到一種簡便的解決方案&#xff0c;只要在網站 Unofficia…

Aleri –復雜事件處理

Sybase的Aleri流媒體平臺是CEP市場中最受歡迎的產品之一。 它在Sybase的交易平臺RAP版本中使用&#xff0c;該版本在資本市場中廣泛用于管理投資組合中的頭寸。 今天&#xff0c;在這個由多個部分組成的系列文章的第一個部分中&#xff0c;我希望提供Aleri平臺的概述&#xff0…

python版本回退_Python爬蟲之BeautifulSoup解析之路

上一篇分享了正則表達式的使用&#xff0c;相信大家對正則也已經有了一定的了解。它可以針對任意字符串做任何的匹配并提取所需信息。但是我們爬蟲基本上解析的都是html或者xml結構的內容&#xff0c;而非任意字符串。正則表達式雖然很強大靈活&#xff0c;但是對于html這樣結構…

0615 團隊第二階段貢獻

0615 團隊第二階段貢獻 列志華http://www.cnblogs.com/liezhihua/ 26% 組長 黃柏堂 http://www.cnblogs.com/huang123/ 22% 團隊 韓麒麟 http://www.cnblogs.com/hanqilin/ 26% 團隊 王俊杰 http://www.cnblogs.com/wangjunjie123/ 28%團隊posted on 2016…

WebStorm 運行Rect Native 項目

今天教大家如何直接使用WebStorm這個IDE直接完成編碼運行項目工作.這樣就可以不用打開Xcode了. 1.首先點擊WebStorm右上方的下拉箭頭彈出的Edit Configurations.... 2.然后會進入一個配置頁面.點擊左上方的.在彈出的列表中選中npm.如圖. 3.在右邊的配置框中,先選擇Command為hel…

python編程比賽_用Python編程分析4W場球賽后,2018世界杯冠軍竟是…

比賽已經開始&#xff0c;我們不妨用 Python 來對參賽隊伍的實力情況進行分析&#xff0c;并大膽的預測下本屆世界杯的奪冠熱門球隊吧&#xff01;通過數據分析&#xff0c;可以發現很多有趣的結果&#xff0c;比如&#xff1a;找出哪些隊伍是首次進入世界杯的黑馬隊伍找出2018…

GlassFish 3.1.2充滿了MOXy(EclipseLink JAXB)

我非常高興地宣布&#xff0c; EclipseLink JAXB&#xff08;MOXy&#xff09;現在是GlassFish 3.1.2中的JAXB&#xff08; JSR-222 &#xff09;提供程序。 我要感謝EclipseLink和GlassFish提交者為實現這一目標付出的??辛勤工作。 在本文中&#xff0c;我將介紹如何利用MOX…

夢斷代碼閱讀筆記03

讀完《夢斷代碼(Dream In Code)》樣書&#xff0c;我感覺心情有點沉重&#xff0c;Chandler項目的結局&#xff0c;它失敗了&#xff0c;它成了眾多失敗軟件項目中的一個。這個結局讓那個我感受到軟件實在是太難了&#xff0c;我覺得當初選這個專業可能到最后只是一個碼農。但是…

Java訪問權限的范圍

二、下面用表格來展示四種修飾符的訪問權限范圍&#xff1a; 同一個類 同一個包 不同包的子類 不同包的非子類 public √ √ √ √ protected √ √ √ 默認(default) √ √ private √ 轉載于:https://www.cnblogs.com/jianxin-lilang/p/6…

JavaFX 2 GameTutorial第2部分

介紹 ?他的是一系列與一個JavaFX 2游戲教程博客條目的第二批。 如果您尚未閱讀第1部分&#xff0c;請參閱JavaFX 2游戲教程的簡介部分。 在第1部分中&#xff0c;我提到了游戲的某些方面以及原型飛船的簡單演示&#xff08;原型由簡單的形狀組成&#xff09;&#xff0c;該飛船…

sqlyog連接mysql教程_如何用SQLyog實現遠程連接MySQL

SQLyog客戶端&#xff0c;用root用戶遠程鏈接MySQL時&#xff0c;提示ldquo;訪問被拒絕rdquo;&#xff0c;在網上搜索了一下原因。原來是MySQL沒有授權其遠程鏈1&#xff0c;SQLyog客戶端&#xff0c;&#xff0c;用root用戶遠程鏈接MySQL時&#xff0c;提示“訪問被拒絕”&…

動態SQL+變量綁定:解決ORA-01704: 字符串文字太長的問題

最近在做一個ESB項目&#xff0c;有一個trigger里面執行動態SQL的時候報錯&#xff1a; ORA-01704: 字符串文字太長 經檢查發現SQL里面有個字段是clob類型&#xff0c;內容長度4009&#xff0c;在oracle里面&#xff0c; 一對引號內的字符長度如果超過4000&#xff0c;就會報OR…

JavaME:Google靜態地圖API

無論您是需要基于位置的應用程序的地圖還是只是出于娛樂目的&#xff0c;都可以使用有史以來最簡單的方法&#xff1a;Google Static Maps API。 在這篇文章中&#xff0c;我們將看到如何從緯度和經度獲得地圖作為圖像。 可以使用Location API獲得緯度和經度&#xff0c;我們將…

在ASP.NET中實現OAuth2.0(一)之了解OAuth

1、什么是OAuth2.0 是一個開放授權標準&#xff0c;允許用戶讓第三方應用訪問該用戶在某一個網站或平臺上的私密資源&#xff08;如照片、視頻、聯系人等&#xff09;&#xff0c;而無須將用戶名和密碼提供給第三方應用 2、OAuth2.0授權模式 授權碼模式&#xff08;authorizati…

mysql日期條件如何應用_MySQL如何使用時間作為判斷條件

背景&#xff1a;在開發過程中&#xff0c;我們經常需要根據時間作為判斷條件來查詢數據&#xff0c;例如&#xff1a;當月&#xff0c;當日&#xff0c;當前小時&#xff0c;幾天內......1. 當月我們只需要使用一個mysql的month(date)函數即可實現。(注意判斷年份)month(date)…