History API を使用する Cordova/PhoneGap アプリケーションがあります。Web アプリと Cordova アプリの間でコードを共有するため、History API を使用します。また、モバイル WebKit は History API をサポートしているように見えます (ただし、実際にはサポートにバグがあります)。
したがって、ある場所では、クライアントの js コードが document.location.reload を作成し、現在の URL は ANY にすることができます (最初の URL とは異なります)。Cordova アプリでは、これにより「アプリケーション エラー: ネットワーク エラー (file:///display/...)」が発生します。以前に history.pushState("/display/..") があったからです。
実際、history.pushState を作成するクライアント コードにパッチを適用することはできますが、これはやりたくありません。
代わりに、Cordova Java コードで URL の読み込みを処理し、それを "index.html" (assets/www のメイン アプリ ページ) の読み込みにリダイレクトしたいと考えています。
これを行う方法?
独自の実装で CordovaWebViewClient をオーバーライドしようとしました:
CordovaWebViewClient webViewClient = new MyWebViewClient(this, this.appView);
this.appView.setWebViewClient(webViewClient);
どこでオーバーライドする必要がありますOverrideUrlLoading:
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
if (url.startsWith("file:///display/"))
return true;
return super.shouldOverrideUrlLoading(webView, url);
}
ただし、このメソッドは、クライアント js コードからのページのリロード時に呼び出されません。