Skip to main content

[Swift] WKWebView, use navigator.userAgent for distinguish web and webView in ios

 Hello, 


I will tell you how to distinguish whether i access mobile web or webview


If you are using a webview, you will want to know the route you accessed.


In general, WebView such as Hybrid App is slower than Native App, and developer sometimes use them to give animation effect such as progress bar


There are many other cases


Like this, Developer distributing hybridApp need to distinguish mobile web and webview for implement function only operates in webview



In Javascript, we know that 'navigator.userAgent;' code informs where you accessed 



If you are access in Mobile Android Web, the alert(navigator.userAgent) value executed by web server Javascript is


"Mozilla/5.0 (Linux; Android 8.0.0; SM-G930K Build/R16NW; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/75.0.3770.101 Mobile Safari/537.36"



But unfortunately, The same goes for Android WebView.


So we can't distinguish between web and webview by using only userAgent value


Let's see what about ios.


IOS's navigator.userAgent value is


"Mozilla/5.0 (iPhone CPU iPhone OS 13_7 like Mac OS X) AppleWebKit/605.1.15 (KHTML like Gecko)"


However in IOS WebVeiw, Web and WebView is same result


Android and IOS can not distinguish where we access by userAgent value


So now, I will add specific word to userAgent value of webview to distinguish whether i accessed web or webview.




- For Android


In Android Project


String userAgent = mWebSettings.getUserAgentString();
mWebSettings.setUserAgentString(userAgent+" APP_WISHROOM_Android");



Add above code in your android project's MainActivity.java


so now, you can distinguish in android web and android webview


by using below javascript code in web project



In Web Project 



  var browserInfo = navigator.userAgent;

if(broswerInfo.indexOf("APP_WISHROOM_Android")>-1){

alert(browserInfo)

}else{

        alert(browserInfo)

                }



Add above code in your web project


Now I will try to access the web view and the web



In Android Mobile Web





In Android WebView


 



In Android Webview, Unlike the web, "APP_WISHROOM_Android" is added


 




- For IOS


Add code,


In Swift Project

webView.evaluateJavaScript("navigator.userAgent"){(result, error) in 
let originUserAgent = result as! String
    let agent = originUserAgent + " APP_WISHROOM_IOS"
    self.webView.customUserAgent = agent
}


Add above code in swift project


You can use evaluateJavaScript method on webView instance, which is the instance that loads webview




In Web Project

  var browserInfo = navigator.userAgent;
if(broswerInfo.indexOf("APP_WISHROOM_IOS")>-1){
alert(browserInfo)
}else{
        alert(browserInfo)
                }


Please be careful, "APP_WISHROOM_IOS" word is different with android



now we can see these result,



In Mobile IOS Web




In IOS WebView



 



In IOS Webview, "APP_WISHROOM_IOS" is added



Now like this way, we can distinguish between mobile web and webview on android and ios respectively


Comments

Popular posts from this blog

[AWS EC2] How to use jconsole and visualVM [2] (remote connect Linux server)

 this article explains how to set up id and password authentication so if you want to know how to use jconsole and visualVM Click below link  we have already figured out how to using it in previous article this article only explains how to set up authentication Modify setenv.sh   vi /usr/local/tomcat7/bin/setenv.sh   Open stenv.sh in your tomcat home directory through vi editor   #!/bin/sh JMX_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=/usr/local/tomcat7/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=/usr/local/tomcat7/conf/jmxremote.access -Djava.rmi.server.hostname=52.79.134.63 -Dcom.sun.management.jmxremote.ssl=false" CATALINA_OPTS=" ${JMX_OPTS} ${CATALINA_OPTS}"   and modify as above   looking closer, the value of '-Dcom.sun.management.jmxremote.authenticate' has been modified from false to true and below code has been added -Dcom.sun.manag...

[AWS EC2] How to use jconsole and visualVM [1] (remote connect Linux server)

Today, let's look at how to use jconsole and visualVm to monitor jvm memory on a Linux server. recently, i met the java memory error so i studied java memory structure and i found jconsole and visualVM which are tools that possible to monitor java memory utilization, available and capacity jconsole and visualVm provide GUI-style memory informations so if i could access remotely, it would be useful tool  now let's start  First of all, i'll tell you about my server and local environmental    server OS : Amazon linux2 WAS : tomcat7 java8   LOCAL window, java   The way of setting to connect jconsole and visualVM are same, so i explain without distinction   [Download JMXRmote.jar in your Server ]   I'll download jmx remote.jar to my local and move it to my linux server 먼저, 로컬에서 톰캣 다운로드 페이지에 가서 자신의 버전에 맞는 jmx remote.jar 파일을 다운받아주세요.  first of all, Download jmx remote.jar that matches your tomcat version from the site below  tomcat.apache.org/d...