веб-просмотр не закрывается на закрытое окно - PullRequest
0 голосов
/ 20 ноября 2018

Мне удалось создать великолепное приложение для веб-просмотра, и я столкнулся с некоторыми трудностями:

- всплывающее окно открывается в newwebview, например, в окне чата comm100, к сожалению, я не могу закрыть окно, когда чатзаконченный.не уверен, что добавить в onPageFinished () и onCloseWindow ()

Любая помощь очень ценится.

public class MainActivity extends AppCompatActivity {
private WebView webView;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView=(WebView) findViewById(R.id.view1);
    webView.loadUrl("https://comm100.com");
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setSupportMultipleWindows(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setAllowFileAccess(true);
    webSettings.setAllowContentAccess(true);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
    webSettings.setAllowFileAccessFromFileURLs(true);
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new WebChromeClient(){

        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
            final WebView newWebview = new WebView(MainActivity.this);
            newWebview.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            WebSettings webSettings1 = newWebview.getSettings();
            webSettings1.setJavaScriptEnabled(true);
            webSettings1.setDomStorageEnabled(true);
            webSettings1.setSupportMultipleWindows(true);
            webSettings1.setJavaScriptCanOpenWindowsAutomatically(true);
            webSettings1.setAllowFileAccess(true);
            webSettings1.setAllowContentAccess(true);
            webSettings1.setAllowUniversalAccessFromFileURLs(true);
            webSettings1.setAllowFileAccessFromFileURLs(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;
                }
                @Override
                public void onPageFinished(WebView view, String url){
                    super.onPageFinished(view, url);
                }

            });
            //return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
            return true;
        }

        @Override
        public void onCloseWindow(WebView window) {
            super.onCloseWindow(window);
        }
    });

}


@Override
public void onBackPressed() {
    if (webView.canGoBack()){
        webView.goBack();
    } else {
    super.onBackPressed();
    }
}
}

Logcat показывает следующую ошибку

I/chromium: [INFO:CONSOLE(8)] "Uncaught (in promise) #<Object>", source: https://chatserver.comm100.com/js/bundle.4273ade4b401f37d4797b68863b403e6.js (8)

посмотрите пример видео Ссылка на видео

1 Ответ

0 голосов
/ 27 ноября 2018

исправлено добавлением WebChromeClient к переопределению onCreateWindow

    public class MainActivity extends AppCompatActivity {
private WebView webView;

@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    webView=(WebView) findViewById(R.id.view1);
    webView.loadUrl("https://comm100.com");
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true);
    webSettings.setSupportMultipleWindows(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    webSettings.setAllowFileAccess(true);
    webSettings.setAllowContentAccess(true);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
    webSettings.setAllowFileAccessFromFileURLs(true);
    webView.setWebViewClient(new WebViewClient());
    webView.setWebChromeClient(new WebChromeClient(){

        // popup webview!
        @Override
        public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, final Message resultMsg) {
            final WebView newWebView = new WebView(MainActivity.this);
            newWebView.getSettings().setJavaScriptEnabled(true);
            newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            newWebView.getSettings().setSupportMultipleWindows(true);
            newWebView.getSettings().setDomStorageEnabled(true);
            newWebView.getSettings().setAllowFileAccess(true);
            newWebView.getSettings().setAllowContentAccess(true);
            newWebView.getSettings().setAllowFileAccessFromFileURLs(true);
            newWebView.getSettings().setAllowUniversalAccessFromFileURLs(true);
            newWebView.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); //making sure the popup opens full screen
            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;
                }
            });
            newWebView.setWebChromeClient(new WebChromeClient(){
                @Override
                public void onCloseWindow(WebView window) {
                    super.onCloseWindow(window);
                    if (newWebView !=null){
                        webView.removeView(newWebView);
                    }
                }
            });
            return true;
        }
        @Override
        public void onCloseWindow(WebView window) {
            super.onCloseWindow(window);
        }
    });

}


@Override
public void onBackPressed() {
    if (webView.canGoBack()){
        webView.goBack();
    } else {
    super.onBackPressed();
    }
}
}
...