Отключение ссылок в Android WebView - PullRequest
4 голосов
/ 14 сентября 2011

Во-первых, я довольно зеленый в мире программирования, поэтому прости меня, если в моем вопросе не хватает разрешения в какой-либо части.В настоящее время я пытаюсь сделать приложение, которое требует ссылки, не может быть выполнено в WebView - или в другом браузере ради этого.Мне удалось соединить следующие две ссылки: В Android Webview, могу ли я изменить DOM веб-страницы? и Titanium Appcelerator Quickie: отключить ссылки в Webview вместе и создать следующиерабочий код:

private class WebClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {       
        view.loadUrl("javascript:document.body.innerHTML = document.body.innerHTML.replace(/<a.*href=/gi,'<a href=\"#\" _url=');");       
    }
}

Приведенный выше фрагмент помещается перед методом onCreate и на него ссылаются в методе onCreate следующим образом:

    viewer = (WebView) findViewById(R.id.wv_engine);
    viewer.setWebViewClient(new WebViewClient());
    viewer.loadUrl(content);

Теперь код работает ...Но только после того, как запрошенная веб-страница была загружена во второй раз.В первый раз, когда я запускаю WebView, example.com имеет все свои ссылки в целости, кликабельности и выполнимости.Использование кнопки, выход из WebView и повторный вход делает все ссылки отключенными путем изменения

<a href="http://www.example.com">link</a>

на

<a href="#" _url="http://www.example.com">link</a>

Теперь я теория, в которой я совсем не уверен(Я не программист).Я считаю, что JavaScript выполняется медленно, что приводит к тому, что манипулирование ссылками никогда не происходит.Вот почему он работает во второй раз, работая с кешем.Я получил эти мысли от чтения этой дискуссии .Однако я понятия не имею, как это исправить.

Поэтому мой вопрос звучит так: как я могу убедиться, что ни одна из ссылок на отображаемом веб-сайте не может быть использована?Есть ли способ сделать манипуляции до того, как сайт будет отображен?

Спасибо за ваше время и усилия.Это действительно удивительное сообщество;)

  • Krede

1 Ответ

2 голосов
/ 14 сентября 2011

Я думаю, что это неправильно:

viewer.setWebViewClient(new WebViewClient());

Полагаю, вы подразумеваете это вместо этого:

viewer.setWebViewClient(new WebClient());

Это объясняет, почему URL-адреса не отключаются при 1-й загрузке.Но я не понимаю, почему они отключаются во второй раз.

Кроме того, я думаю, вы должны удалить это:

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