亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OC與JS互相調用

發布時間:2020-08-09 08:23:48 來源:網絡 閱讀:455 作者:卓行天下 欄目:移動開發

最近項目中要用到html5來實現,涉及到OC調用JS,以及JS調用OC的方法,這里把遇到的問題以及實現方法介紹一下。



  1. //  

  2. //  ViewController.h  

  3. //  OC_And_JS  

  4. //  

  5. //  Created by 張杰 on 15/7/9.  

  6. //  Copyright  2015年 張杰. All rights reserved.  

  7. //  

  8.   

  9. #import <UIKit/UIKit.h>  

  10.   

  11. @interface ViewController : UIViewController <UIWebViewDelegate>  

  12.   

  13. @property (weak, nonatomic) IBOutlet UIButton *oc_call_js_no_params;  

  14. @property (weak, nonatomic) IBOutlet UIButton *oc_call_js_has_params;  

  15. @property (weak, nonatomic) IBOutlet UIWebView *mWebView;  

  16. @property (weak, nonatomic) IBOutlet UILabel *js_call_oc_show;  

  17.   

  18. - (IBAction)ocCallJsNoParams:(id)sender;  

  19. - (IBAction)ocCallJsHasParams:(id)sender;  

  20.   

  21.   

  22. @end  



[objc] view plain copy

  1. //  

  2. //  ViewController.m  

  3. //  OC_And_JS  

  4. //  

  5. //  Created by 張杰 on 15/7/9.  

  6. //  Copyright  2015年 張杰. All rights reserved.  

  7. //  

  8.   

  9. #import "ViewController.h"  

  10.   

  11. @interface ViewController ()  

  12.   

  13. @end  

  14.   

  15. @implementation ViewController  

  16.   

  17. - (void)viewDidLoad {  

  18.     [super viewDidLoad];  

  19.     _mWebView.delegate = self;  

  20.       

  21.     //打開URL  

  22.     NSString *path = [[NSBundle mainBundle] pathForResource:@"index" ofType:@"html"];  

  23.     [self.mWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath: path]]];  

  24. }  

  25.   

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

  27.     NSString *urlstr = request.URL.absoluteString;  

  28.     NSRange range = [urlstr rangeOfString:@"ios://jwzhangjie"];  

  29.     if (range.length!=0) {  

  30.         _js_call_oc_show.text = [NSString stringWithFormat:@"請訪問地址:%@", urlstr];  

  31.     }  

  32.     return YES;  

  33. }  

  34.   

  35. -(void)webView:(nonnull UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{  

  36.     NSLog(@"加載失敗");  

  37. }  

  38.   

  39. -(void)webViewDidStartLoad:(nonnull UIWebView *)webView{  

  40.     NSLog(@"開始加載");  

  41. }  

  42.   

  43.   

  44. -(void)webViewDidFinishLoad:(nonnull UIWebView *)webView{  

  45.     NSLog(@"開始結束");  

  46. //    對于調用js的時候最好這個方法里面或者之后  

  47. }  

  48.   

  49.   

  50. - (void)didReceiveMemoryWarning {  

  51.     [super didReceiveMemoryWarning];  

  52.     // Dispose of any resources that can be recreated.  

  53. }  

  54.   

  55.   

  56.   

  57. - (IBAction)ocCallJsNoParams:(id)sender {  

  58.     NSString *js = [NSString stringWithFormat:@"ocCallJsNoParamsFunction();"];  

  59.     [self.mWebView stringByEvaluatingJavaScriptFromString:js];  

  60. }  

  61.   

  62. - (IBAction)ocCallJsHasParams:(id)sender {  

  63.     NSString *js = [NSString stringWithFormat:@"ocCallJsHasParamsFunction('%@','%@');",@"jwzhangjie",@"http://jwzhangjie.cn"];  

  64.     [self.mWebView stringByEvaluatingJavaScriptFromString:js];  

  65. }  

  66. @end  


[javascript] view plain copy

  1. function ocCallJsNoParamsFunction()  

  2. {  

  3.     alert("OC調用JS中的無參方法");  

  4.     var e = document.getElementById("js_shouw_text");  

  5.     e.options.add(new Option("OC調用JS中的無參方法", 2));  

  6. }  

  7.   

  8. function ocCallJsHasParamsFunction(name, url)  

  9. {  

  10.     alert(name+"的博客地址為:"+url);  

  11.     var e = document.getElementById("js_shouw_text");  

  12.     e.options.add(new Option("OC調用JS中的有參方法", 2));  

  13. }  


[html] view plain copy

  1. <!DOCTYPE html>  

  2. <html lang="zh-CN">  

  3. <head>  

  4.     <meta charset="utf-8">  

  5.     <title>OC與JS互相調用</title>  

  6. </head>  

  7. <body>  

  8.     <div >  

  9.         <select id="js_shouw_text">  

  10.             <option>  

  11.                 展示OC調用JS無參數  

  12.             </option>  

  13.         </select>  

  14.     </div>  

  15.     <div>  

  16.         <BR/>  

  17.         <input type="button" value="JS調用OC方法" onclick="js_call_oc()"/>  

  18.     </div>  

  19.     <!--  這里要清楚,雖然test.js跟index.html不同及目錄,實際安裝到程序里面后,是在同級目錄的,所以這里src不能加目錄,同樣css也是一樣的  -->  

  20.     <script type="text/javascript" src="test.js" charset="UTF-8"></script>  

  21.     <script type="text/javascript">  

  22.         function js_call_oc()  

  23.         {  

  24.             var iFrame;  

  25.             iFrame = document.createElement("iframe");  

  26.             iFrame.setAttribute("src", "ios://jwzhangjie");  

  27.             iFrame.setAttribute("style", "display:none;");  

  28.             iFrame.setAttribute("height", "0px");  

  29.             iFrame.setAttribute("width", "0px");  

  30.             iFrame.setAttribute("frameborder", "0");  

  31.             document.body.appendChild(iFrame);  

  32.             // 發起請求后這個iFrame就沒用了,所以把它從dom上移除掉  

  33.             iFrame.parentNode.removeChild(iFrame);  

  34.             iFrame = null;  

  35.         }  

  36.           

  37.     </script>  

  38. </body>  

  39.   

  40. </html>  


規避1:對于OC去調用JS內容最好在webViewDidFinishLoad方法里或者之后

規避2:在html里面引用js或者css的時候src不要帶有路徑,因為安裝后文件都在同級目錄下面

規避3:OC調用JS的規范

[objc] view plain copy

  1. NSString *js = [NSString stringWithFormat:@"ocCallJsHasParamsFunction('%@','%@');",@"jwzhangjie",@"http://jwzhangjie.cn"];  

  2.    [self.mWebView stringByEvaluatingJavaScriptFromString:js];  

規避4:JS調用OC,這里通過html里面發送一個請求,然后在ios中使用shouldStartLoadWithRequest攔截請求,根據請求url的不同進行處理。


[javascript] view plain copy

  1. function js_call_oc()  

  2.        {  

  3.            var iFrame;  

  4.            iFrame = document.createElement("iframe");  

  5.            iFrame.setAttribute("src""ios://jwzhangjie");  

  6.            iFrame.setAttribute("style""display:none;");  

  7.            iFrame.setAttribute("height""0px");  

  8.            iFrame.setAttribute("width""0px");  

  9.            iFrame.setAttribute("frameborder""0");  

  10.            document.body.appendChild(iFrame);  

  11.            // 發起請求后這個iFrame就沒用了,所以把它從dom上移除掉  

  12.            iFrame.parentNode.removeChild(iFrame);  

  13.            iFrame = null;  

  14.        }  


[objc] view plain copy

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

  2.     NSString *urlstr = request.URL.absoluteString;  

  3.     NSRange range = [urlstr rangeOfString:@"ios://jwzhangjie"];  

  4.     if (range.length!=0) {  

  5.         _js_call_oc_show.text = [NSString stringWithFormat:@"請訪問地址:%@", urlstr];  

  6.     }  

  7.     return YES;  

  8. }  


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

博野县| 延庆县| 山阳县| 元朗区| 乐清市| 巴马| 灵台县| 嘉义县| 长子县| 秦安县| 巴塘县| 固镇县| 崇文区| 尼玛县| 江源县| 武清区| 通山县| 特克斯县| 沈丘县| 改则县| 宜黄县| 天全县| 阿鲁科尔沁旗| 涿州市| 福州市| 长葛市| 阿克陶县| 洛扎县| 武冈市| 涪陵区| 巴塘县| 永城市| 象山县| 乌拉特后旗| 三亚市| 乃东县| 房产| 大石桥市| 溧阳市| 磴口县| 龙门县|