为什么Android WebChromeClient的onCreateWindow方法永远不会被调用?
问题描述:
我在webview服务上构建我的应用程序,并尝试在另一个窗口中打开新的URL(既不在默认系统浏览器中,也不在同一个webview中)。我建立自己WebViewClient和WebChromeClient像下面,为什么Android WebChromeClient的onCreateWindow方法永远不会被调用?
public class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading (WebView view, String url) {
view.loadUrl(url);
return true;
}
}
public class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onCreateWindow (WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
WebView childView = new WebView(view.getContext());
final WebSettings settings = childView.getSettings();
settings.setJavaScriptEnabled(true);
childView.setWebChromeClient(this);
childView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
transport.setWebView(childView);
resultMsg.sendToTarget();
Log.d(LOG_TAG, "onCreateWindow"); // never log
return true;
}
}
我也肯定有我的的WebView setSupportMultipleWindows真。
但是,onCreateWindow永远不会被调用。有什么我错过了吗?
在此先感谢。
答
没有完整的代码,很难说为什么OnCreateWindow()没有被调用。在你的活动OnCreate()方法中,你有类似于以下的代码吗?
// Get the main web viewer
mWebView = (WebView) findViewById(R.id.webViewer);
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
// Set WebViewClient and WebChromClient
mWebView.setWebViewClient(new MyWebViewClient());
mWebView.setWebChromeClient(new MyWebChromeClient());
此外,您认为应该调用哪个代码,您认为应该调用OnCreateWindow()
?
答
您是否告诉“父”webview允许多个窗口?
WebView parentWebview = (WebView) findViewById(R.id.parent_webview);
// ...
parentWebview.getSettings().setSupportMultipleWindows(true);
这是我见过的最常见的错误。
答
add this line to code to invoke onCreateWindow() webView.getSettings()。setSupportMultipleWindows(true);
你的onCreate()方法是什么样的? – 2012-03-16 20:29:21
我只是想在另一个webview中加载新的url。老实说,我把它复制到某个地方 – fifth 2012-03-21 02:37:53
您好@fifth您是否找到相同的解决方案? – 2012-09-26 10:40:47