我有一个使用 History API 的 Cordova/PhoneGap 应用程序。它使用 History API,因为它是 Web 和 Cordova 应用程序之间的共享代码。移动 webKit 看起来支持 History API(但实际上支持是错误的)。
因此,在某些地方,客户端 js-code 会生成 document.location.reload,并且当前 url 可以是 ANY(并且与初始 URL 不同)。在 Cordova 应用程序中,这会导致“应用程序错误:网络错误 (file:///display/...)”。那是因为之前有 history.pushState("/display/..") 。
事实上,我可以在它产生history.pushState 的地方修补客户端代码,但我不想这样做。
相反,我想处理 Cordova Java 代码中的 url 加载并将其重定向到加载“index.html”(资产/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 代码重新加载页面时不会调用该方法。