iOS 與 JS 互動

來源:互聯網
上載者:User
1. 通過UIWebView與JS互動

    通過網頁實現native和伺服器的互動so easy.當然要實現webview的delegate.  self.webView.delegate = self;


1.1  iOS用戶端調用JS的方法.

    直接使用系統的方法stringByEvaluatingJavaScriptFromString調用JS的方法即可.

    [_webView stringByEvaluatingJavaScriptFromString:@"smallfont()"]; 

   *注: smallfont()是JS的方法.


1.2 JS調用iOS的方法.

    相比於安卓,iOS 被調用的時候比較麻煩,因為安卓直接有可以被調用的方法,iOS比較矜持了,是不能直接被調用的

    1. 首先咱們要喝伺服器端定義好方法和標示. 比如 自家的伺服器定義的  js2ios://{"functionname":"buyNow","args":"88888888"}  意思就是我的參數中帶js2ios,我要和你互動了.你給我實現buyNow的方法(functionname)我要使用參數(args)88888888打電話了.

    2. 由於iOS 只能在url重新導向的時候實現被js調用,所以前提是我點網頁上要互動的按鈕之類的,要能跳進我的

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 方法,如果不進,你就可以告訴伺服器的小哥說;嗨,帥哥,你的代碼可能有點問題,前提是你自己確保實現了webview的delegate,也就是 self.webView.delegate = self;

   3. 現在就是我們在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 中攔截url了.

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

    if ([request.URL.scheme isEqualToString:@"js2ios"]) {

        // decode

        NSString *decodeUrlStr1 = [request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

        NSString *decodeUrlStr;

        SEL selctor = NSSelectorFromString(截取到的方法名);

        IMP imp = [self methodForSelector:selctor];

        void (*func) (id,SEL) = (void *)imp;

        func(self,selctor);

//        [self performSelector:selctor withObject:nil];

//        此處直接調用注釋的方法會有警告,可以參考:  我的這篇文章<iOS PerformSelector may cause a leak because its selector is unknown>

//        當然這裡如果不想載入特定的url,或者載入特定的url的時候要進行特殊的處理,可以在這裡攔截

    }

    return YES;

}




2. 運行時互動

    努力學習中...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.