【问题标题】:how to redirect external link in webview in android如何在android的webview中重定向外部链接
【发布时间】:2017-07-06 13:12:05
【问题描述】:

我的 webview 有问题。我在 onCreate 方法中获取 url。在该页面中,单击提交按钮后我有一个登录屏幕,用户应该重定向另一个不同的网站 url 并进入新标签。我怎样才能做到这一点?它现在不能执行任何操作。

@Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

        if (getArguments() != null) {
            tvScreenTitle.setText(getArguments().getString(CONTENT_TITLE));
        }
        new Handler().post(new Runnable() {
            @Override
            public void run() {

                int logoMarginY = (int) (rlScreenHeader.getHeight() * 0.6f);
                int logoMarginX = (int) (rlScreenHeader.getWidth() * 0.3f);

                UIHelper.setMarginTop(btnBack, logoMarginY - btnBack.getHeight() / 2);
                UIHelper.setMarginTop(tvScreenTitle, logoMarginY - tvScreenTitle.getHeight() / 2);
                UIHelper.setMarginLeft(tvScreenTitle, logoMarginX);
            }
        });

        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setUseWideViewPort(true);
        webView.getSettings().setLoadWithOverviewMode(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSupportMultipleWindows(true);
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onCreateWindow(WebView view, boolean dialog, boolean userGesture, Message resultMsg)
            {
                webView.loadUrl(url);
                return true;
            }
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false);
            }
        });
        webView.setWebViewClient(webViewClient);


        webView.loadUrl(this.url);
    }

这是我的 onCreateView;

@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_app_browser, container, false);
        ButterKnife.bind(this, view);

        UIHelper.setTypeface(rootFragment, GlobalApplication.getInstance().getTypeface());
        return view;
    }

    boolean loadingFinished = true;
    boolean redirect = false;

    WebViewClient webViewClient = new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (!loadingFinished) {
                redirect = true;
            }
            loadingFinished = false;
            webView.loadUrl(url);
            return true;  
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            loadingFinished = false;

            AppBrowserFragment.this.url = url;
            tvAddressBarTitle.setText(url);

            progressAddressBar.setVisibility(View.VISIBLE);
            rlAddressBar.setVisibility(View.VISIBLE);
            btnRefresh.setImageResource(R.drawable.browsericon_reloadover);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            if(!redirect){
                loadingFinished = true;
            }

            if(loadingFinished && !redirect){
                AppBrowserFragment.this.url = url;

                if (StringUtils.isNotNullOrWhitespace(title)) {
                    tvAddressBarTitle.setText(title);
                }
                else {
                    tvAddressBarTitle.setText(view.getTitle());
                }

                progressAddressBar.setVisibility(View.INVISIBLE);
                rlAddressBar.setVisibility(View.GONE);

                btnRefresh.setImageResource(R.drawable.browsericon_reload);

                btnBackBrowser.setImageResource(webView.canGoBack() ? R.drawable.browsericon_back : R.drawable.browsericon_backover);
                btnForward.setImageResource(webView.canGoForward() ? R.drawable.browsericon_forward : R.drawable.browsericon_forwardover);

            }
            else {
                redirect = false;
            }
        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.cancel();
        }
    };

【问题讨论】:

    标签: android google-chrome webview google-chrome-webview


    【解决方案1】:

    使用条件,反之亦然

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.contains("/shuffle")) {
            mWebView.loadUrl(url);
            return false;
        } else {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
            return true;
        }
    }
    

    【讨论】:

      【解决方案2】:

      您需要在用户单击提交按钮时启动新的intent,并且您必须使用intent 中可用的putExtra 方法将新URL 作为参数传递给intent。 p>

      Intent intent = new Intent(this, CLASSNAME.class);
      intent.putExtra(URL, <url>);
      startActivity(intent);
      

      【讨论】:

      • 如何理解用户在 webview 中做了什么?
      • 你是指webview中的提交按钮本身吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 2012-03-23
      • 2016-11-20
      • 2021-12-27
      • 2013-04-01
      • 1970-01-01
      • 2018-12-05
      相关资源
      最近更新 更多