網頁中調用JS與JS注入

不少應用爲了節約成本,作出同時在Android與iOS上都能使用的界面,這時就要使用WebView來作。Android和IOS上都有WebView,作起來很省事。固然這時就要考慮如何在Android或iOS中實現與網頁的交互。對iOS而言,包括如何在網頁中調用OC,以及如何在OC中對網頁進行操做。javascript

先將網頁弄到iOS項目中:html

網頁內容以下, 僅供測試:java

  1. <html>  
  2. <head>  
  3.     <meta xmlns="http://www.w3.org/1999/xhtml" http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  4.     <title>這是一個示例html文件</title>  
  5.     <script Type='text/javascript'>  
  6.         function clickme() {  
  7.             alert('點擊按鈕了!');  
  8.         }  
  9.     </script>  
  10. </head>  
  11. <body>  
  12.     <h1>OC與JS互動</h1>  
  13.     <h2>blog.csdn.net/xn4545945</h2>  
  14.     <!-- 自定義協議與OC進行交互 -->  
  15.     <href="neng://loadUrl/blog.csdn.net">點擊一下, 連接調用OC函數</a>  
  16.     <br/>  
  17.     <br/>  
  18.     <href="http://m.baidu.com">js注入, 到baidu頁面上實驗</a>  
  19. </body>  
  20. </html>  

 

 

1、在OC中調用JSweb

最重要的方法:stringByEvaluatingJavaScriptFromStringxcode

直接上代碼,說明見註釋:瀏覽器

 

[objc]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**===========================OC 中調用 JS====================================*/  
  2. - (void)webViewDidFinishLoad:(UIWebView *)webView {  
  3.     //1.OC中調用JS的文檔對象. (先拼出文檔對象的屬性) 能夠在瀏覽器控制檯輸入來進行測試  
  4.     NSLog(@"%@", [self.webView stringByEvaluatingJavaScriptFromString:@"document.title"]);  
  5.   
  6.     //2.OC中調用JS的方法  
  7.     [self.webView stringByEvaluatingJavaScriptFromString:@"clickme()"];  
  8. }  


2、用超連接來調用OC中方法app

 

步驟:函數

 

*1.設置webView的代理<UIWebViewDelegate>
*2.在代理的方法shouldStartLoadWithRequest:中調用.(該方法與網頁的加載有關)
*方法:就是在網頁連接中寫好自定義協議.而後在OC方法中檢查點擊的連接中是否有該協議,有則作相關操做.

代碼以下:oop

 

 

[objc]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**=========================== webView連接 中調用 OC===============================*/  
  2. /**webView的代理方法:加載頁面有關. 當直接返回爲NO時,會調用JS方法 
  3.    其中request參數與發送請求有關*/  
  4. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {  
  5.     NSLog(@"%@", request.URL.absoluteString); //能夠直接拿到發送請求的網址  
  6.     NSString *urlStr = request.URL.absoluteString;  
  7.   
  8.     // 格式 neng://loadUrl/blog.csdn.net  協議/方法/網址  
  9.     //判斷連接中的協議頭,若是是neng://, 則進行相關操做  
  10.     if ([urlStr hasPrefix:@"neng://"]) {  
  11.         //拿到除去協議頭的後部  
  12.         NSString *urlContent = [urlStr substringFromIndex:[@"neng://" length]];  
  13.         NSLog(@"%@", urlContent);  
  14.   
  15.         //用/來拆分字符串  
  16.         NSArray *urls = [urlContent componentsSeparatedByString:@"/"];  
  17.         NSLog(@"拆分的結果爲:%@", urls);  
  18.   
  19.         //取出方法名  
  20.         if (urls.count != 2) {  
  21.             return NO;  
  22.         }  
  23.         NSString *funName = [NSString stringWithFormat:@"%@:", urls[0]]; //帶參數的方法,加冒號  
  24.   
  25.         SEL callFun = NSSelectorFromString(funName);  
  26. //取消警告  
  27. # pragma clang diagnostic push  
  28. # pragma clang diagnostic ignored "-Warc-performSelector-leaks"  
  29.         [self performSelector:callFun withObject:urls[1]]; //將blog.csdn.net做爲參數傳入  
  30. # pragma clang diagnostic pop  
  31.         NSLog(@"方法名爲%@, 傳入參數爲%@", funName, urls[1]);  
  32.   
  33.         return NO;  
  34.     }  
  35.   
  36.     return YES;  
  37. }  
  38.   
  39. - (void)loadUrl:(NSString *)urlStr {  
  40.     NSLog(@"接收到參數: %@", urlStr);  
  41.   
  42.     //跳轉到指定的URL--->urlStr  
  43.     NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", urlStr]];  
  44.     NSURLRequest *request = [NSURLRequest requestWithURL:url];  
  45.   
  46.     [self.webView loadRequest:request];  
  47. }  


3、JS實現注入測試

 

JS是操做網頁的利器,利用好JS才能真正在應用中爲所欲爲的操做網頁。

核心方法:stringByEvaluatingJavaScriptFromString(與第一個相同,這個是在iOS中操做JS最重要方法)

代碼以下:

 

[objc]  view plain copy 在CODE上查看代碼片 派生到個人代碼片
  1. /**===========================JS  注入====================================*/  
  2. - (void)jsClick {  
  3.     [self.webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"  
  4.      "script.type = 'text/javascript';"  
  5.      "script.text = \"function myFunction() { "   //定義myFunction方法  
  6.      "var field = document.getElementsByName('word')[0];"  
  7.      "field.value='WWDC2014';"  
  8.      "document.forms[0].submit();"  
  9.      "}\";"  
  10.      "document.getElementsByTagName('head')[0].appendChild(script);"];  //添加到head標籤中  
  11.   
  12.     [self.webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];  
  13. }  

 

 



 

附上例子源碼:http://download.csdn.net/detail/xn4545945/7584575

相關文章
相關標籤/搜索