iOS與H5交互

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

1.jpg

一、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 onclick="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 onclick="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代碼如下:
2.png

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

3.png

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

4.png

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

5.png

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容