Android webview如何检测何时重新加载
Posted
技术标签:
【中文标题】Android webview如何检测何时重新加载【英文标题】:Android webview how to detect when reloads 【发布时间】:2014-05-10 13:42:51 【问题描述】:您好,感谢您的关注!
请在我的 android 应用程序中有一个 WebView。
我需要检测 WebView 何时重新加载 URL。
要明确:当用户按下网页上的按钮时,我的 WebView 中包含的网页会重新加载,但 ID 不会更改 URL,
因此shouldOverrideUrlLoading
不会被调用。
如何检测 URL 重新加载???
这是我的代码:
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.preappove);
wait = new ProgressDialog(this);
wait.setTitle("Please Wait");
wait.setMessage("Redirecting to PayPal for your approval");
wait.show();
wv = (WebView) findViewById(R.id.webView);
wv.clearCache(true);
wv.clearHistory();
wv.getSettings().setjavascriptEnabled(true);
wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
perfs = getSharedPreferences("pefs",
PreApprove.this.MODE_MULTI_PROCESS);
sender = perfs.getString("sender", null);
receiver = perfs.getString("receiver", null);
paymentamount = perfs.getString("paymentamount", null);
maxpaymentamount = perfs.getString("maxpaymentamount", null);
paymentnumber = perfs.getString("paymentnumber", null);
// wv.setWebViewClient(new Callback());
wv.getSettings().setBuiltInZoomControls(true);
GetPreappovalKey gpk = new GetPreappovalKey();
try
gpk.execute().get();
catch (InterruptedException e)
// TODO Auto-generated catch block
e.printStackTrace();
catch (ExecutionException e)
// TODO Auto-generated catch block
e.printStackTrace();
wv.setWebViewClient(new WebViewClient()
public void onPageFinished(WebView view, String url)
wait.dismiss();
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url)
if (url.contains("www.google.com"))
Welcome.fa.finish();
Toast.makeText(PreApprove.this, "Setup Completed Successfully!", Toast.LENGTH_LONG).show();
//PreApprove.this.finish();
Payment.pay(PreApprove.this);
// GOOD APPROVED
if (url.contains("www.yahoo.com"))
PreApprove.this.finish();
// BAD CANCELLED
view.loadUrl(url);
return true;
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
// NEVER GETS CALLED WHEN PAYPAL RELOADS :-(
);
wv.loadUrl("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-preapproval&preapprovalkey="
+ preappovalkey);
【问题讨论】:
【参考方案1】:你试过WebViewClient.shouldInterceptRequest(WebView view, String url)
吗?
您可能还想查看一下贝宝网页,看看单击按钮后会发生什么。例如是 AJAX 请求吗?
----编辑----
还请注意,WebViewClient.shouldOverrideUrlLoading()
并不总是针对每个请求调用。据我所知,它不会至少在以下情况下:
-
页内导航。例如,两个 URL 仅具有不同的 URL 片段。
POST 请求。
来自 iframe 的请求。
它也记录在Android doc:它被称为...when a new url is about to be loaded in the current WebView
。
关于onPageStarted/Finished()
,只有在重新加载主html/文档时才会调用它。即它不会在 AJAX 请求的情况下被调用。
【讨论】:
【参考方案2】:您可以在与shouldOverrideUrlLoading
相同的客户端中使用它:
Link
@Override
public void onPageFinished(WebView view, String url)
如果您想检测页面何时完成加载。
或者你可以使用:
Link
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
检测页面何时开始加载。
【讨论】:
感谢 Daan,我已经尝试过,但是当重新加载 URL 时他们没有检测到,他们不会感到厌烦 :-(((以上是关于Android webview如何检测何时重新加载的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 Cordova WebView 何时完全完成加载?