package com.camnter.newlife.widget.webview;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
* Description:JsResponseWebView
* Created by:CaMnter
* Time:2016-01-12 11:36
*/
public class JsResponseWebView extends WebView {
private static final String INTERFACE_NAME = "jsResponseInterface";
private static final String ON_CLICK_PICTURE = "onClickPicture";
private static final String ON_CLICK_TAG = "onClickTag";
private String javascript;
public JsResponseWebView(Context context) {
super(context);
this.initWebView();
}
public JsResponseWebView(Context context, AttributeSet attrs) {
super(context, attrs);
this.initWebView();
}
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public JsResponseWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
super(context, attrs, defStyleAttr);
this.initWebView();
}
public JsResponseWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.initWebView();
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public JsResponseWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
this.initWebView();
}
@SuppressLint("SetJavaScriptEnabled") private void initWebView() {
WebSettings settings = this.getSettings();
settings.setJavaScriptEnabled(true);
this.setWebViewClient(new JsResponseViewClient());
this.javascript = "javascript:(function(){" +
" // 图片 " +
" var images = document.getElementsByTagName('img');" +
" for(var i=0;i<images.length;i++){" +
" images[i].onclick=function(){" +
" window." + INTERFACE_NAME + "." + ON_CLICK_PICTURE +
"(images[i].src);" +
" }" +
" }" +
" // 标签 " +
" var tags = document.getElementsByClassName('video');" +
" for(var i=0;i<tags.length;i++){" +
" tags[i].onclick=function(){" +
" window." + INTERFACE_NAME + "." + ON_CLICK_TAG + "(tags[i].id,i);" +
" }" +
" }" +
"})()";
}
/**
* inject your java script
*/
private void injectJavaScript() {
if (TextUtils.isEmpty(this.javascript)) return;
this.loadUrl(this.javascript);
}
public void setJavascript(String javascript) {
this.javascript = javascript;
}
@SuppressLint("AddJavascriptInterface")
public void setJsResponseInterface(JsResponseInterface jsResponseInterface) {
if (jsResponseInterface == null) return;
this.addJavascriptInterface(jsResponseInterface, INTERFACE_NAME);
}
/**
* 继承此类实现自己逻辑
* 并且调用setJsResponseInterface
*/
public interface JsResponseInterface {
/**
* 标签点击
*
* @param name name
*/
@JavascriptInterface void onClickTag(String name);
/**
* 图片点击
*
* @param url url
* @param position position
*/
@JavascriptInterface void onClickPicture(String url, int position);
}
private class JsResponseViewClient extends WebViewClient {
@Override public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
JsResponseWebView.this.injectJavaScript();
}
}
}