У меня есть WebView
, в котором я отображаю веб-контент, который я не могу контролировать.Контент отображается нормально, но есть ссылки, которые вызывают всплывающее окно.Функция javascript, которая делает это, выглядит следующим образом:
function getEntry(id) {
var win = window.open('', 'Booking',
'resizable=yes,scrollbars=yes,status=no,width=500,height=400');
win.document.location = '/some/url/1-' + id ;
}
Я не могу легко изменить это, и если люди, ответственные за страницу, которую я загружаю, изменит ее, я думаю, что мое приложение с треском провалится ....
Моя WebView
настройка в действии выглядит следующим образом:
_webview = new WebView(this);
setContentView(_webview);
final Activity activity = this;
_chromeClient = new MyChromeClient();
_webview.setWebChromeClient(_chromeClient);
//I experimented with changing user agent, in case that would have any effect, it didn't...
_webview.getSettings().setUserAgentString("Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1");
_webview.setWebViewClient(new MyWebViewClient());
_webview.getSettings().setJavaScriptEnabled(true);
_webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
_webview.getSettings().setSupportZoom(true);
_webview.getSettings().setBuiltInZoomControls(true);
_webview.getSettings().setDomStorageEnabled(true);
//Cache settings...
_webview.getSettings().setAppCacheMaxSize(10248);
_webview.getSettings().setAppCachePath("/data/data/com.your.package.appname/cache");
_webview.getSettings().setAllowFileAccess(true);
_webview.getSettings().setAppCacheEnabled(true);
MyWebClient:
private class MyWebViewClient extends WebViewClient {
@Override
public void onLoadResource(WebView view, String url) {
Log.d("MyWebViewClient",url);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
showProgressDiag();
Log.d("MyWebViewClient","shouldOverride... : " + url);
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url){
hideProgressDiag();
}
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
if(failingUrl.equals("file:///android_asset/html/error.html")){
hideProgressDiag();
Toast.makeText(_context, "Error! Check internet connection, or try again later...", Toast.LENGTH_SHORT).show();
}
else {
Toast.makeText(_context, failingUrl, Toast.LENGTH_SHORT).show();
view.loadUrl("file:///android_asset/html/error.html");
}
}
}
MyChromeClient:
private class MyChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int progress) {
Pdiag.setProgress(progress * 100);
}
}
При нажатии на одну из ссылок, которая указывает на функцию javascript, все, что происходит, это то, что WebView
становится серым, не проходя через shouldOverrideUrlLoading()
.Когда я нажимаю клавишу «Назад», приложение закрывается, это означает, что в истории навигации WebView
ничего не было помещено.Иногда ничего не происходит, но тогда shouldOverrideUrlLoading()
запускается и из Log.d()
я могу видеть, что правильный URL-адрес для всплывающего окна задан WebView. *1024*
Дело в том,в очень редких случаях это проявляется нормально, но я понятия не имею, как воспроизвести его, и действительно ли это отображается во всплывающем окне.
Я потерян ... И довольно разочарован ... Думая овместо этого смотрю плохой комедийный сериал: (*
РЕДАКТИРОВАТЬ: На самом деле, возможно, URL-адрес был не совсем корректным ... В Firefox URL-адрес заканчивается на "X <<<<"но в моем выводе Log.d () он заканчивается "X% 3C% 3C% 3C% 3C" ... Я выясню, могу ли я это изменить ... </p>
РЕДАКТИРОВАТЬ 2: Нет, ничего не делал ... URL идентичен URL в Firefox ...