知识养成了思想,思想同时又在融化知识。这篇文章主要讲述Android检测webview URL更改相关的知识,希望能为你提供帮助。
我的android应用程序中有一个webview,想要检测网址何时发生变化。
当用户在info.php页面上时,我想使用它来隐藏顶部栏中的信息按钮,当他不在info.php页面上时再次显示它。
【Android检测webview URL更改】我用Google搜索但找不到任何正常工作的代码,有人可以帮帮我吗?
答案您可以使用WebViewClient.shouldOverrideUrlLoading检测WebViewClient上的每个URL更改
另一答案这将有助于检测由javascript引起的重定向。
WebViewClient mWebViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.android.onUrlChange(window.location.href);
");
}
};
myWebView.setWebViewClient(mWebViewClient);
}
@JavascriptInterface
public void onUrlChange(String url) {
Toast.makeText(mContext, "Url redirected",Toast.LENGTH_SHORT).show();
}
另一答案对于那些通过javascript加载网址。有一种方法可以通过JavascriptInterface检测网址更改。这里我以youtube为例。使用JavaScriptInteface有异步问题,幸运的是它只是一个回调在这里,所以这将是更少的问题。请注意,必须存在@javascriptinterface注释。
{
youtubeView.getSettings().setJavaScriptEnabled(true);
youtubeView.setWebViewClient(mWebViewClient);
youtubeView.addJavascriptInterface(new MyJavaScriptInterface(),
"android");
youtubeView.loadUrl("http://www.youtube.com");
}WebViewClient mWebViewClient = new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:window.android.onUrlChange(window.location.href);
");
};
};
class MyJavaScriptInterface {
@JavascriptInterface
public void onUrlChange(String url) {
Log.d("hydrated", "onUrlChange" + url);
}
}
另一答案如果您重写此WebViewClient方法,您将能够处理网址更改,并且javascript网址会更改:
public class YXWebViewClient extends WebViewClient {@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.i("Listener", "Start");
}@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.i("Listener", "Finish");
}}
然后在WebView中设置WebViewClient
yxWebViewClient = new YXWebViewClient();
webview.setWebViewClient(yxWebViewClient);
另一答案我知道我已经迟到了,但我一遍又一遍地遇到这个问题......我终于找到了一个非常直接的蠢事。只需覆盖WebViewClient.doUpdateVisitedHistory
override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) {
// your code here
super.doUpdateVisitedHistory(view, url, isReload)
}
它适用于所有网址更改甚至javascript!
如果这不会让你开心那么我不知道会是什么:)
另一答案尝试使用
onLoadResource
。即使您使用JS更改网址,也会至少调用一次。但它可能被称为不止一次,所以要小心。另一答案方法onPageFinished似乎至少在现代WebViews中起作用。
另一答案我有一个有趣的问题让我想到了这个问题并很乐意提供一个可以帮助其他人的解决方案,如果他们这样做是因为googlebingyahoo搜索。
从我登录用户或注销用户的首选项屏幕返回后,mwebVew.reload()不会获取我想要加载的新URL。它会更好地更新共享首选项,但不会更新和替换url网页。因此,在几个小时没有看到答案之后,我尝试了以下内容,并且它起到了真正的作用。
mWebView.resumeTimers();
如果您想了解更多信息,请参阅link to the doco。
希望它可以拯救别人我经历过的痛苦,并且很高兴有人告诉我,我应该以另一种方式实施它。
另一答案我有同样的问题。所以我通过重写
public void onPageStarted(WebView view, String url, Bitmap favicon)
方法解决了这个问题,如下所示: webView.setWebViewClient(new WebViewClient(){@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
// Here you can check your new URL.
Log.e("URL", url);
super.onPageStarted(view, url, favicon);
} });
您还可以覆盖
public void onPageFinished(WebView view, String url)
方法,以便在页面加载过程结束时获取新的URL。另一答案我用这个方法:
webView.setWebChromeClient(new WebChromeClient()
{
@Override public void onProgressChanged(WebView view, int newProgress) {
if (view.getUrl().equals(mUrl))
{}
else
{
mUrl = view.getUrl();
// onUrlChanged(mUrl) // url changed
}
super.onProgressChanged(view, newProgress);
}
};
);
mUrl是
String
的字段......推荐阅读
- 在离子2处失败'离子cordova运行android'
- 在开发ionic2-cordova app时,“bnr不被认为是内部命令”
- 离子 - 错误(找不到模块'android-versions')
- Android ndk没有捆绑v8 .a文件符号
- UnsatisfiedLinkError,Cocos2D-x app在启动时崩溃
- Android的双簧管库中是否支持音频处理()
- Android NDK undefined引用google protobuf
- Android通话录音未录制来电语音
- Android Studio 3.0.1不会构建NDK静态库