Показать сообщение отдельно
Старый 15.12.2011, 17:26   #3
barsunduk
ПроЭктировщик
 
Аватар для barsunduk
 
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений
(для 271 пользователей)
Ответ: Как контролировать WebView?

Сообщение от cyberblut Посмотреть сообщение
Ох Ступил ты на тёмную сторону силы. Как же я ненавижу гугл с его долбоандроидом за то, что приходится иногда вытворять, чтобы это дерьмо работало. Наверное разработчики этой шняги трахаются с собаками периодически.
сначала прочитал часть фразы "Ступил ты..." и хотел было обидеться, но не смог, потому что действительно ступил, ступая на темную сторону. ибо собак я не люблю, а в сексе придерживаюсь традиционных взглядов, что разработчиками андроида явно не приветствуется.

хочу сказать большое спасибо за решение проблемы, ибо в этом вопросе, похоже ни здравый смысл, ни преподобный гугл на путь истинный наставить меня не смогли бы.

маленький подарок любителям копипаста:
package ru.jru.sru;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class 
RegActivity extends Activity {

    private class 
WebViewInjector {
        public 
String processBody(String body) {
            
// если на странице есть NOT FOUND, то закрываем недобраузер
            
int p body.toLowerCase().indexOf("not found");
            
int l body.length();
            if ((
>= 0)&&(l)) {
                
finish();
            }
            return 
body;
        }
    }

    private class 
wvClient extends WebViewClient {
        @
Override
        
public boolean shouldOverrideUrlLoading(WebView viewString url) {
            
// открываем внешние ссылки в том же недобраузере
            
view.loadUrl(url);
            return 
true;
        }
        @
Override
        
public void onPageFinished (WebView viewString url) {
            
// просматриваем содержимое страницы (в нашем случае секция body)
            
super.onPageFinished(viewurl);
            
wvReg.loadUrl("javascript:window.WebInjector.processBody(document.getElementsByTagName('body')[0].innerHTML);");
        }
    }

    public 
WebView wvReg// наш недобраузер
    
    
public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        
setContentView(R.layout.regform);
        
wvReg = (WebView)findViewById(R.id.wvReg);
        
wvReg.getSettings().setJavaScriptEnabled(true);
        
wvReg.addJavascriptInterface(new WebViewInjector(), "WebInjector");
        
wvReg.setWebViewClient(new wvClient());
        
wvReg.loadUrl("http://www.mysite.ru");
    }
    
    
// возврат на предыдущую страницу по нажатию аппаратной кнопки back
    
public boolean onKeyDown(int keyCodeKeyEvent event
    {
        if ((
keyCode == KeyEvent.KEYCODE_BACK) && wvReg.canGoBack()) 
        {
            
wvReg.goBack();
            return 
true;
        }
        return 
super.onKeyDown(keyCodeevent);
    }


__________________
to be or not to be - it's not a question!
2b or not 2b = ff
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
SBJoker (15.12.2011)