我对android的webview有一个奇怪的问题。我将一个页面加载到webview中,其中包含一个链接。我已将webview设置为在同一webview中打开该链接(而不是在浏览器上)。当下一页打开时,它会向mysql写一些东西。如果用户已在同一天打开该第二页,则用户将被重定向到第一页,并且没有任何内容写入mysql。我注意到在第一种情况下的3-4次中有1次按下链接将内容写入mysql两次(具有相同的时间戳)并立即将用户重定向到第一页。因此,当点击链接时,似乎连续两次打开网址。一切都在我的计算机浏览器(safari,firefox和chrome)上运行。我发现一些文章说文件上的空src-fields会导致这种情况,但我的php / html代码中没有空的src-fields。
Webview的设置如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_description);
WebViewClient yourWebClient = new WebViewClient()
{
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
webView.loadUrl("file:///android_asset/404.html");
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if ( url.contains("google") == false ) {
webView.loadUrl(url);
return false;
}
else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
return true;
}
}
};
webView = (WebView) findViewById(R.id.description);
webView.getSettings().setJavaScriptEnabled(true);
if (Build.VERSION.SDK_INT >= 11){
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
String url = (MainActivity.URL+"app/description.php?tagid="+tagId+"&screenwidth="+viewPortWidth+"&screenheight="+viewPortHeight+"&deviceid="+MainActivity.myDeviceId+"&lang="+MainActivity.myLanguage+"&os=android);
webView.setWebViewClient(yourWebClient);
webView.loadUrl(url);
}
我的链接只是一个锚标记内的典型div(用php编写):
echo '<a href="description.php?type='.$type.'&screenwidth='.$screenWidth.'&screenheight='.$screenHeight.'&tagid='.$tagid.'&no=1&deviceid='.$deviceid.'&lang='.$language.'">
<div class="redbutton">'.$lang['NO'].'</div></a>';
答案 0 :(得分:2)
实际上只返回false,网页会自动加载到WebView
。无需使用webView.loadUrl();
。
if ( url.contains("google") == false ) {
return false;
}
尝试一下,如果不起作用,请告诉我。
作为Documentation州 -
while返回false表示当前WebView处理url
答案 1 :(得分:0)
好的,我找到了原因。这是原因:
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if ( url.contains("google") == false ) {
webView.loadUrl(url);
return false; // <----THIS LINE
}
else {
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(i);
return false;
}
}
那应该是真的。我通过测试得出了这个:
@Override
public void onPageFinished(WebView view, String url)
{
super.onPageFinished(view, url);
String url_new = view.getUrl();
Log.v("","Webview url: "+url_new);
}
我注意到每次按下某个链接时它都会打印出两次url,但是当第一次加载webview时它没有这样做。当我将return语句更改为true时,它只会按照每次点击打印一次。