Ответ 1
Переопределить 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", поэтому в действительности единственная функция, которую этот код делает, - это reset история css вообще, но она вызывается только один раз, когда WebView инстанцируется (или создано, не проверено), поэтому для истинного многопользовательского опыта вам нужно будет воссоздать веб-просмотр при каждом входе в систему.
Моя проблема в том, что я не могу правильно загрузить urlHistory. Мой веб-просмотр Honeycomb Xoom, похоже, игнорирует мои данные. Хорошо, надеюсь, это сработает для вас. Для меня просто вызов callback.onReceiveValue(новый String [] {}); в getVisitedHistory() будет достаточно хорошо.
EDIT: Я просто положил еще двадцать минут, потому что мне любопытно. Этот метод является тем, что делегирует 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-адреса мы посетили?;) < Сарказм