2

I'm building my app on webview service and trying to open new url in another window (neither in default system browser nor in same webview). I set up my own WebViewClient and WebChromeClient like below,

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;
    }
}

I also definitely had my webview setSupportMultipleWindows to true.
However, onCreateWindow never got called. Is there anything I missed?
Thanks in advance.

fifth
  • 4,249
  • 9
  • 45
  • 62

3 Answers3

6

Did you tell the "parent" webview that multiple windows are allowed?

WebView parentWebview = (WebView) findViewById(R.id.parent_webview);
// ...
parentWebview.getSettings().setSupportMultipleWindows(true);

That's the most common mistake I've seen.

Jeremy Logan
  • 47,151
  • 38
  • 123
  • 143
1

add this line to code to invoke onCreateWindow() webView.getSettings().setSupportMultipleWindows(true);

sharry
  • 370
  • 1
  • 5
  • 15
0

Without the full code its hard to say why OnCreateWindow() isn't being called. In your activity OnCreate() method do you have code similar to the following?

    // 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());

Also, what code are you using in which you think the OnCreateWindow() should be called?

robnick
  • 1,720
  • 17
  • 27