WebViewでshouldOverrideUrlLoading()が反応しない問題

StackOverflowでも”shouldOverrideUrlLoading(…) not executed if “window.location.href” modified in a timeout callback“と報告されているが、WebViewで JavaScript から location.href を書き換えると通常shouldOverrideUrlLoading()が反応するのに setTimeout()を使用して location.href を書き換えた場合は shouldOverrideUrlLoading() が呼ばれません。たとえば、下記のgotoMainPage()というメソッドがあった場合、

function gotoMainPage( ) {
window.location.href = "main/main.do";
}

通常、htmlのonClick=””からgotoMainPage()を実行した場合は shouldOverrideUrlLoading() が実行されます。

<!-- これは大丈夫 -->
<button onclick="gotoMainPage();">

これをsetTimeout()を経由するように変更した途端shouldOverrideUrlLoading()が実行されなくなってしまいます。

<!-- これだとshouldOverrideUrlLoading()が動かない -->
<button onclick="setTimeout(gotoMainPage,100);">

setTimeout()を使った場合、どうやらAjaxなどと同様ユーザ手動でない参照とみなされ、バックグラウンド処理として判定をスキップしてしまうようです。解決方法としては
[Java]
@Override
public void onLoadResource (WebView view, String url)
{
}
[/Java]
は反応するので、AJaxなどと処理を共通にしても問題なく、onLoadResource()に置き換え可能な場合はこちらを使うとよさそうです。

コメントを残す

メールアドレスが公開されることはありません。