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)
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.
shouldOverrideUrlLoading()
基于每个 URL 进行调用。因此,如果http://site1.com/重定向到http://site2.com/,然后重定向到http://site3.com/,则您正在调用WebView.loadUrl()
这些 URL 中的每一个。因此每个都出现在返回堆栈中。
WebViewClient
您可能想要一个WebChromeClient
. 定义了一个仅在尝试创建新窗口时调用的WebChromeClient
方法,而不是针对它访问的每个 URL 调用。onCreateWindow
WebView
归档时间: |
|
查看次数: |
3906 次 |
最近记录: |