package com.hanju.video.app.ui.video.parser;
|
|
import android.os.Bundle;
|
import android.util.Log;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.ViewGroup;
|
import android.webkit.ConsoleMessage;
|
import android.webkit.JavascriptInterface;
|
import android.webkit.ValueCallback;
|
import android.webkit.WebChromeClient;
|
import android.webkit.WebSettings;
|
import android.webkit.WebView;
|
|
import com.hanju.video.app.util.downutils.StringUtils;
|
|
import java.util.List;
|
|
import androidx.annotation.NonNull;
|
import androidx.annotation.Nullable;
|
import androidx.fragment.app.Fragment;
|
|
/**
|
* 视频播放路径解析
|
*/
|
public class VideoPlayUrlParseFragment extends Fragment {
|
private String TAG = "VideoPlayUrlParseFragment";
|
private WebView webView;
|
private String url;
|
|
private WriteHandlingWebViewClient mWriteHandlingWebViewClient;
|
|
private void initView() {
|
WebSettings settings = webView.getSettings();
|
settings.setJavaScriptEnabled(true);
|
mWriteHandlingWebViewClient = new WriteHandlingWebViewClient(webView);
|
webView.setWebViewClient(mWriteHandlingWebViewClient);
|
webView.setWebChromeClient(new WebChromeClient() {
|
@Override
|
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
|
Log.i(TAG, consoleMessage.lineNumber() + ":" + consoleMessage.message());
|
return super.onConsoleMessage(consoleMessage);
|
}
|
});
|
}
|
|
@Override
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
}
|
|
@Nullable
|
@Override
|
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
|
webView = new WebView(getContext());
|
initView();
|
|
return webView;
|
}
|
|
|
public void startParse(String url, List<ParseParams> parseParamsList, final IVideoParseListener videoParseListener) {
|
this.url = url;
|
webView.loadUrl(url);
|
|
mWriteHandlingWebViewClient.init(parseParamsList, new WriteHandlingWebViewClient.OnResponseListener() {
|
|
@Override
|
public void onResult(WriteHandlingWebResourceRequest request, ParseParams parseParam, String result) {
|
webView.post(new Runnable() {
|
@Override
|
public void run() {
|
webView.loadUrl("javascript:" + parseParam.getParseJS());
|
|
// webView.loadUrl("javascript:help.log(document.getElementsByTagName('html')[0].innerHTML)");
|
|
// webView.loadUrl("javascript:"+String.format("parseResult(\"%s\")", result));
|
|
String requestUrl = request.getUrl().toString();
|
webView.evaluateJavascript(String.format("parseResult(\"%s\",\"%s\")", requestUrl, parseParam.needResult ? result.replace("\"", "\\" + "\"") : ""), new ValueCallback<String>() {
|
|
@Override
|
public void onReceiveValue(String value) {
|
if (StringUtils.isNullOrEmpty(value))
|
return;
|
if (value.contains("url=")) {
|
String ps = value.split("\\?")[1];
|
String[] sts = ps.split("&");
|
for (String st : sts) {
|
if (st.contains("url=")) {
|
value = st.replace("url=", "");
|
break;
|
}
|
}
|
}
|
|
Log.i(TAG, "解析结果:" + value);
|
if (videoParseListener != null) {
|
videoParseListener.onSuccess(value.replace("\"", ""));
|
}
|
}
|
});
|
|
}
|
});
|
}
|
});
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
}
|
|
@Override
|
public void onDestroy() {
|
super.onDestroy();
|
webView.destroy();
|
}
|
|
public interface IVideoParseListener {
|
public void onSuccess(String result);
|
|
public void onFail(String msg);
|
}
|
|
public static class ParseParams {
|
|
private String interceptRegex;
|
private String parseJS;
|
private boolean needResult;
|
|
public boolean isNeedResult() {
|
return needResult;
|
}
|
|
public void setNeedResult(boolean needResult) {
|
this.needResult = needResult;
|
}
|
|
public ParseParams(String interceptRegex, String parseJS, boolean needResult) {
|
this.interceptRegex = interceptRegex;
|
this.parseJS = parseJS;
|
this.needResult = needResult;
|
}
|
|
public String getInterceptRegex() {
|
return interceptRegex;
|
}
|
|
public void setInterceptRegex(String interceptRegex) {
|
this.interceptRegex = interceptRegex;
|
}
|
|
public String getParseJS() {
|
return parseJS;
|
}
|
|
public void setParseJS(String parseJS) {
|
this.parseJS = parseJS;
|
}
|
}
|
|
|
}
|