iOS、Android與webView的交互

直接主題:Android或iOS webView圖片的點(diǎn)擊事件處理。

一、Android

1. webView自定義的webViewClient做如下處理

@Override
 public void onPageFinished(WebView view, String url) {
      view.getSettings().setJavaScriptEnabled(true);
      addImageClickListner(view);
 }

private void addImageClickListner(WebView contentWebView) {
        // 這段js函數(shù)的功能就是,遍歷所有的img幾點(diǎn),并添加onclick函數(shù),函數(shù)的功能是在圖片點(diǎn)擊的時(shí)候調(diào)用本地java接口并傳遞url過(guò)去
        contentWebView.loadUrl("javascript:(function(){" +
                "var objs = document.getElementsByTagName(\"img\"); " +
                "for(var i=0;i<objs.length;i++)  " +
                "{"
                + "    objs[i].onclick=function()  " +
                "    {  "
                + "        window.android.openImage(this.src);  " +
                "    }  " +
                "}" +
                "})()");
    }

其中window.android.openImage(this.src);中的android為自定義標(biāo)識(shí)

2. webView

webView.addJavascriptInterface(new JSInterface(), "android");

其中JSInterface為自定義,android對(duì)應(yīng)webViewClient中的window.android.openImage()

3. JSInterface中代碼

public class JSInterface {
        public JSInterface() {

        }

        @JavascriptInterface
        public void openImage(String img) {
            // img即獲取到圖片的點(diǎn)擊事件,該如何處理自己看著需求。
            Intent intent = new Intent(getActivity(), PhotoViewActivity.class);
            intent.putExtra((PhotoViewActivity.Intent_PhotoViewActivity_photo, img);
            startActivity(intent);
        }
    }

二、iOS

兩個(gè)UIWebView代理的使用:

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    [webView stringByEvaluatingJavaScriptFromString:@"javascript:(function(){ var objs = document.getElementsByTagName(\"img\"); for(var i=0;i<objs.length;i++)  { objs[i].onclick=function() { window.location.href= \"iOS://openImage:/\" + this.src} }})()"];
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = [[request URL] absoluteString];
    NSArray *urlComps = [urlString componentsSeparatedByString:@"://"];

    if([urlComps count] && [[urlComps objectAtIndex:0] isEqualToString:@"iOS"])
    {
        NSString *funcStr = [urlComps objectAtIndex:1];
        if ([funcStr containsString:@"openImage"]) {
            NSString *imgSrc = [urlComps objectAtIndex:2];
            //  imgUrl即為圖片地址
            NSString *imgUrl = [NSString stringWithFormat:@"http://%@", imgSrc];
        }
        return NO;
    }
    return YES;
}

注:兩個(gè)代理中"iOS"為標(biāo)識(shí)

結(jié)語(yǔ):有h5功底的同學(xué),可以在此基礎(chǔ)上進(jìn)行各種拓展

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容