Я занимаюсь разработкой приложения для Android. В прошлых проектах я использовал WebView для отображения веб-контента. Это дало мне возможность перехватывать события, такие как загруженная страница и так далее. Важная вещь, которую я смог сделать, - получить содержимое страницы и использовать его в коде Java. Если честно, я использую трюк, но он работает. Я поместил необходимый код моего фрагмента, чтобы использовать WebView для открытия URL-адреса, что-то делать и когда пользователь заходит на определенную страницу и получает содержимое страницы (с MyJavaScriptInterface
):
public class LoginFragment extends MyAppFragment {
@BindView(R.id.webView)
public WebView webView;
public LoginFragment() {
}
@Override
public void onResume() {
super.onResume();
webView.setVisibility(View.VISIBLE);
}
@SuppressLint("SetJavaScriptEnabled")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_login, container, false);
initBinder(rootView);
...
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);
webView.setWebViewClient(mWebViewClient);
/* Register a new JavaScript interface called HTMLOUT */
webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
webView.loadUrl(getResources().getString(R.string.url_login).trim());
return rootView;
}
/* An instance of this class will be registered as a JavaScript interface */
class MyJavaScriptInterface {
@JavascriptInterface
@SuppressWarnings("unused")
public void processHTML(String token) {
if (token.contains(URL_LANDING)) {
...
}
}
}
private WebViewClient mWebViewClient = new WebViewClient() {
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
Logger.info("shouldInterceptRequest " + request.getUrl().toString());
if (URL_LANDING_SESAPP.equals(request.getUrl().toString())) {
...
}
return super.shouldInterceptRequest(view, request);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
...
return super.shouldOverrideUrlLoading(view, request);
}
@Override
public void onLoadResource(WebView view, String url) {
...
super.onLoadResource(view, url);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
...
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
...
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
pageLoading = false;
if (loginDone) {
view.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByTagName('body')[0].innerHTML);")
}
}
};
}
IsЕсть ли эквивалентный способ сделать это с помощью пользовательских тегов Chrome? Заранее спасибо.