WebView で、onPageFinished が複数回実行されるケースの1つ。
<form action="#" method="post" > なんて書かれ、javascript で、HTTP-POST が走るような
サイトの場合、
"#" の onPageFinished → POST先の onPageStarted → onPageFinished
となり、webview の goBack()では POST前のページに戻ってくれない。
しかたなく、"#" で履歴がどれだけ連続で蓄積されたかをチェックして
goBack() か、canGoBackOrForward(-n) するしかないのか。。。。
ページ戻るボタンに以下のように OnClickListner を付ける。。
prevButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
if (webview.canGoBack()){
WebBackForwardList list = webview.copyBackForwardList();
int ix = -1;
String url = null;
while(innerPageLink(url=list.getItemAtIndex(list.getCurrentIndex()+ix).getUrl())) ix--;
if (url != null){
if (webview.canGoBackOrForward(ix)){
webview.goBackOrForward(ix);
}else{
webview.goBack();
}
}else{
webview.goBack();
}
}
}
});
============================================
上記の innerPageLink メソッドは以下のとおり。。。
protected boolean innerPageLink(String url){
String[] u = url.split("/");
return u[u.length-1].indexOf("#") >= 0;
}