OC與JS交互

實現WebView代理方法


//網頁加載完時調用

-(void)webViewDidFinishLoad:(UIWebView *)webView{

    

    //1.操作網頁中的參數

      [self domHtml:webView];

    

   // 2.在iOS中加載HTML

      [self iOSforHtml:webView];   

}


//是否允許加載請求(攔截網址)

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{


    //3.訪問相冊

    [self Visitphoto:request];


    //4.得到網頁中的參數

    [self getHtmlCont:request];

       

    return YES;

}


操作網頁中的參數(OC->JS)

OC提交JS請求.運行JS方法

====================Html代碼====================


<html>

   <head>

      <meta charset="UTF-8">

   </head>

   <body>

      <p id="word">這是標題/p>

      <ul>

          <li class="change">你好</li>

          <li>我好</li>

          <li>大家好</li>

          <li>纔是真的好</li>

      </ul>

   </body>

</html>


====================OC代碼======================


-(void)domHtml:(UIWebView *)webView{

    // 刪除

    NSString *str1 = @"var word = document.getElementById('word');";

    NSString *str2 = @"word.remove();";

    //操作JavaScript

    [webView  stringByEvaluatingJavaScriptFromString:str1];

    [webView  stringByEvaluatingJavaScriptFromString:str2];

    

    // 更改

    NSString *str3 = @"var change = document.getElementsByClassName('change')[0];"

    "change.innerHTML = '好你的哦!';";

    [webView stringByEvaluatingJavaScriptFromString:str3];

    

    // 插入

    NSString *str4 =@"var img = document.createElement('img');"

    "img.src = 'img_01.jpg';"

    "img.width = '160';"

    "img.height = '80';"

    "document.body.appendChiJavaScriptld(img);";

    [webView stringByEvaluatingJavaScriptFromString:str4];

}


2.在iOS中加載HTML(OC->JS)---修改他人網頁


-(void)iOSforHtml:(UIWebView *)webView{

    // 改變標題

    NSString *str1 = @"var h1 = document.getElementsByTagName('h1')[0];"

    "h1.innerHTML='CY鮮花網';";

    [webView stringByEvaluatingJavaScriptFromString:str1];

    

    //刪除尾部

    NSString *str2 =@"document.getElementById('footer').remove();";

    [webView stringByEvaluatingJavaScriptFromString:str2];

    

    // 讓scrollView顯示

    self.wbView.scrollView.hidden = NO;

    self.activityView.hidden = YES;

    

    // 拿出所有的網頁內容

    NSString *str3 = @"document.body.outerHTML";

    NSString *html = [webView stringByEvaluatingJavaScriptFromString:str3];

    NSLog(@"%@", html);

}


HTML訪問相冊(JS->OC)

JS提交請求到OC

====================Html代碼====================


<html>

   <head>

      <meta charset="UTF-8">

   </head>

   <body>

      <button οnclick="getImage();">訪問相冊</button>

      

      <script>

          function getImage(){

             window.location.href = 'xmg://getImage';

          }

      </script>

   </body>

</html>


====================OC代碼====================

-(void)Visitphoto:(NSURLRequest *)request{

    //截取請求

    NSString *str=request.URL.absoluteString;

    NSRange range=[str rangeOfString:@"xmg://"];

    if (range.location!=NSNotFound) {

        NSString *method=[str substringFromIndex:range.location+range.length];

        

        SEL sel=NSSelectorFromString(method);

        [self performSelector:sel];

    }

}


-(void)getImage{

    UIImagePickerController *imgVc=[[UIImagePickerController alloc]init];

    imgVc.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

    [self presentViewController:imgVc animated:YES completion:nil];

}


得到html中的參數(JS->OC)

====================Html代碼====================


<html>

   <head>

      <meta charset="UTF-8">

      <style>

          body{

              margin:20px;

          }

      </style>

   </head>

   <body>

       <p></p>

       <span>用戶名</span>

       <input id="username">

       <p></p>

       <span>密碼</span>

       <input id="pwd" type="password">

       <p></p>


      <button id="btn">登錄</button>

      

      <script>

          var username = document.getElementById('username');

          var pwd = document.getElementById('pwd');

          var btn = document.getElementById('btn');

          

           btn.onclick = function(){

            var name = username.value; // 拿到用戶名

            var password = pwd.value;

             //定義協議

             window.location.href = 'xmg://' + name + '?' + password;

          }

      </script>

   </body>

</html>


====================OC代碼====================



-(void)getHtmlCont:(NSURLRequest *)request{

    

    //Html中自定義協議:window.location.href = 'xmg://' + name + '?' + password;

    //OC中通過截取字符串得到Html中相應的參數。

    

    //截取請求

    NSString *str=request.URL.absoluteString;

    NSRange range=[str rangeOfString:@"xmg://"];

    if (range.location!=NSNotFound) {

        NSString *method=[str substringFromIndex:range.location+range.length];

        NSLog(@"======[%@]",method);

    }

}

方法:


iOS開發,UIWebview與H5之間的交互

http://www.unjeep.com/q/841949662.htm

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