Vas*_*Vas 11 javascript android chromium android-webview d3.js
我目前正致力于通过d3将数据绘制到webview中.当然,一旦我尝试重新加载图表并提供新数据,事情就会破裂.这条可爱的线条不断涌现:W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid
.
我已经搜索了SO以获得解释,但似乎没有任何结论.人们只是建议在webview设置中打开DOM存储(这显然无法解决问题).我怀疑在重新加载图表和提供新数据之间存在竞争条件.我在我的WebViewClient中重写了onPageFinished()来调用监听器将数据加载到图表中,认为它可以解决竞争条件,但无济于事.
有人可以向我解释一下是什么W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid
意思吗?我评价过了吗?我该怎么调试呢?
任何提示都表示赞赏.
编辑:我已经解决了原始问题,但我仍然希望了解该行的含义.赏金.
连续打电话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");
Run Code Online (Sandbox Code Playgroud)
注意这一行
wv.setWebChromeClient(new WebChromeClient());
在API级别19(Android 4.4 KitKat
)中,浏览器引擎从切换Android webkit
到chromium webkit
,几乎所有原始WebView
API's
包装到对应的chromium webkit
.
这是从Chromium源提供错误(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;
}
Run Code Online (Sandbox Code Playgroud)
这是内容的渲染警告.
您可以在github
源代码中永远地挖掘,可能很高兴看到从...调用方法determinedVisibility
(in BindingManagerImpl.java
)的位置(后缀"Impl"用于实现).希望这会有所帮助; O)
归档时间: |
|
查看次数: |
6146 次 |
最近记录: |