Выполнить Javascript рекурсивно WebView Android не работает - PullRequest
0 голосов
/ 23 октября 2018

Я застрял с проблемой 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, если получает аналогичный хост, но не работает постоянно.

Любая помощь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...