Переопределить WebChromeClient и WebViewClient ... Черт, что было скрыто.
Я действительно должен был выкопать немного , чтобы выяснить это.
WebView webView = (WebView)findViewById(R.id.myWebView);
WebChromeClient myWebChromeClient = new WebChromeClient(){
@Override
public void getVisitedHistory(ValueCallback<String[]> callback) {
// called during webview initialization, original implementation does strictly nothing
// and defaults to the native method WebViewCore.nativeProvideVisitedHistory()
String[] myUserHistory = getVisitedUrlsFromMyOwnDatabase(userId);
callback.onReceiveValue(myUserHistory);
}
};
WebViewClient myWebViewClient = new WebViewClient(){
@Override
public void doUpdateVisitedHistory(WebView view, String url,
boolean isReload) {
// called whenever there is a new link being visited
insertIfNotExistVisitedUrlIntoMyOwnDatabaseForUser(userId);
super(view, url, isReload);
}
}
webView.setWebViewClient(myWebViewClient);
webView.setChromeClient(myWebChromeClient);
webView.getSettings().etc(whatever)...
Я думаю, что "почти там".Вот часть, которой я управлял: пока он полностью удаляет историю CSS, так что мы на полпути.Я не могу заставить браузер распознавать формат URL, который я предоставляю в «myUserHistory», поэтому, по сути, единственная функция, которую выполняет этот код, - полностью сбрасывать историю CSS, но он вызывается только один раз, когда создается WebView (или создается).не проверял), поэтому для истинного многопользовательского опыта вам нужно будет заново создавать веб-просмотр при каждом входе в систему.
Моя проблема сейчас заключается в том, что мне не удается правильно загрузить urlHistory.Мой веб-просмотр Honeycomb Xoom, похоже, игнорирует мои данные.Ах, хорошо, я надеюсь, что это работает для вас.Для меня просто вызов callback.onReceiveValue (new String [] {});в getVisitedHistory () будет достаточно хорошо.
РЕДАКТИРОВАТЬ: я просто положил еще двадцать минут, потому что мне любопытно.Этот метод используется для делегирования WebChromeClient (mCallbackProxy = WebChromeClient).
protected void populateVisitedLinks() {
ValueCallback callback = new ValueCallback<String[]>() {
public void onReceiveValue(String[] value) {
sendMessage(EventHub.POPULATE_VISITED_LINKS, (Object)value);
}
};
mCallbackProxy.getVisitedHistory(callback);
}
Он защищен в WebViewCore, который является частным атрибутом WebView без средства доступа.SendMessage делегирует EventHub, который является частным, а WebViewCore заполнен закрытыми собственными методами, и один из них, по-видимому, действительно вызывает метод populateVisitedLinks () во время инициализации.
Если кто-то из Google не добавит в WebView публичный метод для инициирования повторного заселения, я боюсь, что практически невозможно достичь вашей цели.Извините: (
В качестве дополнительного примечания, вся эта нативная обработка посещенной истории действительно заставляет меня задуматься: почему производители оборудования так заботятся о том, какие URL мы посетили?;) <<< sarcasm </p>