需要有关Android webview window.open()和window.close()

时间:2018-01-30 05:44:25

标签: android webview

我正在开发一个Android应用程序。它是我网站的WebView。该网站包含一个弹出按钮,点击它后,将打开一个新窗口并显示内容。该链接可以来自外部网站。然而,当我实现这个时,新的选项卡正在打开,之后它会弹出打开浏览器,尽管在webview中打开它。我尝试过同样的网站链接。对于这两种情况,它都是popsup浏览器。请帮助我使用工作代码打开一个新选项卡并以编程方式关闭它。这是我的代码:

public class MainActivity extends Activity {

private WebView webView;


private myWebChromeClient mWebChromeClient;
private myWebViewClient mWebViewClient;

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle savedInstanceState) {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    webView = (WebView) findViewById(R.id.webView);

    mWebViewClient = new myWebViewClient();
    webView.setWebViewClient(mWebViewClient);
    WebSettings webSettings = webView.getSettings();
    mWebChromeClient = new myWebChromeClient();
    webView.setWebChromeClient(mWebChromeClient);
    webView.getSettings().setJavaScriptEnabled(true);

    webView.getSettings().setSupportMultipleWindows(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);



    webView.getSettings().setAllowFileAccess(true);

    webView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
    webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
    webView.getSettings().setAppCacheEnabled(true);

    webSettings.setDomStorageEnabled(true);
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

    String aapp = "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36";


    webSettings.setUserAgentString(aapp);


    webView.loadUrl("http://website/test.php");
}

  @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {



        if (webView.canGoBack()) {

            webView.goBack();
            finish();
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);

}

class myWebChromeClient extends WebChromeClient {
    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
        WebView newWebView = new WebView(MainActivity.this);
        WebSettings webSettings = newWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        String app = "Mozilla/5.0 (Linux; Android 6.0.1; Redmi Note 3 Build/MMB29M) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36";

         webSettings.setUserAgentString(app);

        // Other configuration comes here, such as setting the WebViewClient

        final Dialog dialog = new Dialog(MainActivity.this);
        dialog.setContentView(newWebView);
        dialog.show();


        newWebView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onCloseWindow(WebView window) {
                dialog.dismiss();
            }


        });

        ((WebView.WebViewTransport)resultMsg.obj).setWebView(newWebView);
        resultMsg.sendToTarget();
        return true;
    }
}


class myWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView webView, String url) {


        String webUrl = webView.getUrl();
        System.out.println(webUrl);

        super.onPageFinished(webView, url);

    }

}

}

1 个答案:

答案 0 :(得分:2)

当在网页内触摸链接时,根据网页实施,有两种可能的情况: 1)链接将在同一窗口中打开。 2)链接将在新窗口中打开。

对于使用以下代码的第一种情况:

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}

在WebViewClient实现中覆盖shouldOverrideUrlLoading将在同一窗口中打开链接。

对于第二种情况,网页请求在新窗口中打开网址。对于这种情况,我们需要这个:

webView.getSettings().setSupportMultipleWindows(true);

然后在webview中添加新的网络Chrome客户端,以便在网页请求新窗口时获取活动

webView.setWebChromeClient(new WebChromeClient() {


    @Override
    public boolean onCreateWindow(WebView view, boolean isDialog,
            boolean isUserGesture, Message resultMsg) {

            WebView newWebView = new WebView(WebpageActivity.this);
            newWebView.getSettings().setJavaScriptEnabled(true);
            newWebView.getSettings().setSupportZoom(true);
            newWebView.getSettings().setBuiltInZoomControls(true);
            newWebView.getSettings().setPluginState(PluginState.ON);
            newWebView.getSettings().setSupportMultipleWindows(true);
            view.addView(newWebView);
            WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
            transport.setWebView(newWebView);
            resultMsg.sendToTarget();

            newWebView.setWebViewClient(new WebViewClient() {
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });

            return true;
        }
    }

});

很乐意提供帮助。