Не мог бы кто-нибудь раз и навсегда объяснить не могу вызвать determinedVisibility () - никогда не видел соединения для pid
В настоящее время я работаю над графическим отображением данных через d3 в webview. Естественно, все ломается, как только я пытаюсь перезагрузить график и скормить ему новые данные. Эта прекрасная строка продолжает появляться: W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid
.
W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid
? Я ошибся в оценке? Как я могу его отладить?
Любые советы приветствуются.
EDIT: я решил исходную проблему, но все равно хотел бы узнать, что означает эта строка. Баунти поднялся.
2 ответа:
Последовательные вызовы
loadUrl
вызывают состояние гонки. Проблема в том, чтоloadUrl("file://..")
не завершается сразу, и поэтому при вызовеloadUrl("javascript:..")
он иногда будет выполняться до загрузки страницы.
Вот как я настраиваю свойwebview
:wv = (CustomWebView) this.findViewById(R.id.webView1); WebSettings wv_settings = wv.getSettings(); //this is where you fixed your code I guess //And also by setting a WebClient to catch javascript's console messages : wv.setWebChromeClient(new WebChromeClient() { public boolean onConsoleMessage(ConsoleMessage cm) { Log.d(TAG, cm.message() + " -- From line " + cm.lineNumber() + " of " + cm.sourceId() ); return true; } }); wv_settings.setDomStorageEnabled(true); wv.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); setTitle(view.getTitle()); //do your stuff ... } @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("file")) { // Keep local assets in this WebView. return false; } } }); //wv.setWebViewClient(new HelpClient(this));// wv.clearCache(true); wv.clearHistory(); wv_settings.setJavaScriptEnabled(true);//XSS vulnerable wv_settings.setJavaScriptCanOpenWindowsAutomatically(true); wv.loadUrl("file:///android_asset/connect.php.html");
Примечание эта строка
wv.setWebChromeClient(new WebChromeClient());
На уровне API 19 (Android 4.4
KitKat
), браузерный движок переключился сAndroid webkit
наchromium webkit
, причем почти все исходныеWebView
API's
обернутый к двойникамchromium webkit
.Это является методом , который дает ошибку (BindingManagerImpl.java ), из источника хрома:
@Override public void determinedVisibility(int pid) { ManagedConnection managedConnection; synchronized (mManagedConnections) { managedConnection = mManagedConnections.get(pid); } if (managedConnection == null) { Log.w(TAG, "Cannot call determinedVisibility() - never saw a connection for the pid: " + "%d", pid); return; }
это предупреждение о рендеринге от контента.
Вы можете копаться вечно в этом исходном кодеgithub
, было бы неплохо посмотреть, откуда вызывается методdeterminedVisibility
(вBindingManagerImpl.java
)...(суффикс "Impl" для реализации). Надеюсь, это поможет; O)
Это обычно всплывает, когда вы переопределяете метод
shouldOverrideUrlLoading()
.Из моего WebView использования на предыдущих приложениях, это связано с тем, что визуализируется на WebView, что ловится на вышеуказанном методе и в свою очередь игнорируется. Я часто вижу это, когда веб-сайты, которые я загружаю, пытаются загрузить сценарии за пределами разрешенного домена.