之前 写过一篇 根据 UserAgent 判断网页是在浏览器、或在微信、或在APP中 (http://www.miaoqiyuan.cn/p/useragent-in-where),那篇文章能通过 UserAgent 判断出 是否在微信、浏览器或者其他APP中,如果需要判断是否在我们自己开发的APP中,就无能为力了。
WebView 提供了 setUserAgentString,可以任意修改 UserAgent。我们只需要在 UserAgent 中增加 自定义的 字符串,就可以在网页中通过JS判断是否在我们自己的APP内。
MainActivity.java 的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package
cn.miaoqiyuan.MyApp;
import
android.net.http.SslError;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.webkit.SslErrorHandler;
import
android.webkit.WebSettings;
import
android.webkit.WebView;
import
android.webkit.WebViewClient;
public
class
MainActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = (WebView) findViewById(R.id.webView);
//修改User-Agent,比如 MyApp,版本号2.0
WebSettings webConf = webView.getSettings();
webConf.setUserAgentString(webConf.getUserAgentString() +
" MyApp/2.0<Android>"
);
//不使用浏览器打开
webView.setWebViewClient(
new
WebViewClient(){
@Override
public
boolean
shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return
true
;
}
@Override
public
void
onReceivedError(WebView view,
int
errorCode, String description, String failingUrl) {
//出现错误页,显示报错
String data =
"<br /><br /><br /><br /><br /><center>无法连接服务器</center>"
;
view.loadUrl(
"javascript:document.body.innerHTML=\""
+ data +
"\""
);
}
@Override
public
void
onPageFinished(WebView view, String url) {
//页面加载完毕
super
.onPageFinished(view, url);
}
});
//支持JavaScript
webView.getSettings().setJavaScriptEnabled(
true
);
//加载网页APP地址,只要界面做的像APP就可以了
}
}
|
判断也很简单,JS或者服务器端脚本都可以进行判断:
1
2
3
4
5
6
7
8
|
var
inMyApp = /MyApp\/(\d\.\d)/.exec(navigator.userAgent)
if
( inMyApp ){
console.log(
"Yes, Version:"
+ inMyApp[1]);
//不在APP内
//Yes, Version:2.0
}
else
{
console.log(
"No"
);
//不在APP内
//No
}
|