确定 android 中加载的特定网页视图页面
Determine particular webview page loaded in android
我们有多个 html 页面(例如 abc.com/abc.html、abc.com/xyz.html)要单独加载WebView class 个 android。
现在,我想实现一旦任何特定页面成功加载,我就可以识别特定页面并代表我可以在本机应用程序中显示一些消息。
我正在使用 webview.getTitle()
来识别,但它在一段时间内从 webview 页面开始发生变化。
您可以在将特定页面加载到 WebView 之前比较 link(URL)
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
/* compare your URL from here*/
updateUrl(url);
}
@Override
public void onPageFinished(WebView view, String url) {
// progressDialog.dismiss();
progressBar.setVisibility(View.GONE);
}
});
如果这只是您要跟踪的title
,您可以实现一个WebChromeClient
并在方法ReceivedTitle()
中监听事件ReceivedTitle
你可以看看:
WebChromeClient
myWebView.setWebChromeClient(new WebChromeClient(){
onReceivedTitle(WebView webview, String title){
// put your code here
}
}
)
编辑
您正在处理 javascript 因此您必须在您的网络视图中启用它:
public class MainActivity extends AppCompatActivity {
private WebView myWebView;
private TextView myTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.loadUrl("http://example.local/changetitle/");
myTextView = (TextView) findViewById( R.id.textView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
myWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
myTextView.setText(title);
}
});
}
}
这是一个测试过的示例网页:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>First Title</title>
</head>
<body onload="myFunction();">
<div id="text">No changes</div>
<script>
var i=27
function myFunction() {
document.title=""+i;
var x = document.getElementById("text"); // because title won't dispay in the body
x.innerText = "title : "+document.title;
i++;
setTimeout(myFunction,3000);
}
</script>
</body>
</html>
希望对您有所帮助
我们有多个 html 页面(例如 abc.com/abc.html、abc.com/xyz.html)要单独加载WebView class 个 android。
现在,我想实现一旦任何特定页面成功加载,我就可以识别特定页面并代表我可以在本机应用程序中显示一些消息。
我正在使用 webview.getTitle()
来识别,但它在一段时间内从 webview 页面开始发生变化。
您可以在将特定页面加载到 WebView 之前比较 link(URL)
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
/* compare your URL from here*/
updateUrl(url);
}
@Override
public void onPageFinished(WebView view, String url) {
// progressDialog.dismiss();
progressBar.setVisibility(View.GONE);
}
});
如果这只是您要跟踪的title
,您可以实现一个WebChromeClient
并在方法ReceivedTitle()
中监听事件ReceivedTitle
你可以看看: WebChromeClient
myWebView.setWebChromeClient(new WebChromeClient(){
onReceivedTitle(WebView webview, String title){
// put your code here
}
}
)
编辑
您正在处理 javascript 因此您必须在您的网络视图中启用它:
public class MainActivity extends AppCompatActivity { private WebView myWebView; private TextView myTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://example.local/changetitle/"); myTextView = (TextView) findViewById( R.id.textView); WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); myWebView.setWebChromeClient(new WebChromeClient(){ @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); myTextView.setText(title); } }); }
}
这是一个测试过的示例网页:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>First Title</title>
</head>
<body onload="myFunction();">
<div id="text">No changes</div>
<script>
var i=27
function myFunction() {
document.title=""+i;
var x = document.getElementById("text"); // because title won't dispay in the body
x.innerText = "title : "+document.title;
i++;
setTimeout(myFunction,3000);
}
</script>
</body>
</html>
希望对您有所帮助