android webview backkey中的死循环,用于重定向href链接

Blu*_*gle 10 mobile android webview

在处理重定向链接时,我在Android webview应用程序中使用反键进入死循环.

例如,当我的webview开始时,它将转到link0.

在link0中,有一个链接到link1的href链接.Link1重写到link2.

因此,如果我单击link1,它将转到link1,然后重定向到link2.当我点击返回键时,它应该返回到link0,在我的情况下.但相反,它转到link1,它再次重定向回link2.所以我再也没有机会回去了.

如果它们不是重定向链接,则反向键可以与其他链接正常工作.

我用Google搜索网页寻求帮助,但未找到相关问题.

顺便说一下,反密钥在互联网浏览器中按预期工作.但不是在webview中.

以下是我的代码,供您试用.正如你在代码中看到的那样,我尝试了onBackPressed和onKeyDown,但是更好的是.

谢谢你的帮助.我对此持续了一段时间.

================================================== ================================

public class MyActivity extends Activity 
{
    private WebView myWebView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        myWebView = (WebView) findViewById(R.id.webview);
        myWebView.getSettings().setJavaScriptEnabled(true);
        myWebView.loadUrl("http://50.112.242.120/temp/");
        myWebView.setWebViewClient(new MyWebViewClient());
    }

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

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
            myWebView.goBack();
            return true;
        }
        // If it wasn't the Back key or there's no web page history, bubble up to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    }
}
Run Code Online (Sandbox Code Playgroud)

.

// main.xml
<?xml version="1.0" encoding="utf-8"?>
<WebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
Run Code Online (Sandbox Code Playgroud)

lin*_*yfh 6

webview.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.i(tag, "url = " + url);
            // view.loadUrl(url);

            // return super.shouldOverrideUrlLoading(view, url);
            return false;
        }
    });
Run Code Online (Sandbox Code Playgroud)

看!!!!重要的是,shouldOverrideUrlLoading必须返回false

在shouldOverrideUrlLoading中,您无法调用view.loadUrl.


j__*_*__m 1

shouldOverrideUrlLoading()基于每个 URL 进行调用。因此,如果http://site1.com/重定向到http://site2.com/,然后重定向到http://site3.com/,则您正在调用WebView.loadUrl()这些 URL 中的每一个。因此每个都出现在返回堆栈中。

WebViewClient您可能想要一个WebChromeClient. 定义了一个仅在尝试创建新窗口时调用的WebChromeClient方法,而不是针对它访问的每个 URL 调用。onCreateWindowWebView