iOS和H5的混編(交互)

說道iOS和H5的混編,其實就是OC(swift)和JS相互調用方法,實現點擊H5頁面上的button,執行iOS原生方法,或者是點擊iOS的按鈕,執行JS方法,話不多說,直接重點!

1、iOS調用JS方法

在iOS中,html頁面是通過UIWebView來展示的,所以,交互的過程離不開UIViewDelegate

 

通過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>

2、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>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章