JAVASCRIPT PC MOBILE 구분/ 브라우저 구분


var device = "pc";
var browserName = undefined;
var userAgent = navigator.userAgent.toLowerCase();
var userAgentName = navigator.appName;
var mobileDevice;

var mobilePhones = new Array('iphone','ipod','android','blackberry','windows ce','nokia','webos',

'opera mini','sonyericsson','opera mobi','iemobile');


/* pc, mobile 확인 */

for(var i=0;i<mobilePhones.length;i++) {

if(userAgent.indexOf(mobilePhones[i]) != -1){

device = "mobile";

}

}


/* mobile device name 확인 */

for(var txt in mobilePhones){

    if(userAgent.match(mobilePhones[txt]) != null){

    mobileDevice = mobilePhones[txt];

        break;

    }

}


/* browser name 확인 */

switch (true) {

case /trident|msie/.test(userAgent):

browserName = 'ie';

break;

// IE 12(edge)

case /edge/.test(userAgent):

browserName = 'edge';

break;

case /chrome/.test(userAgent):

browserName = 'chrome';

break;

case /safari/.test(userAgent):

browserName = 'safari';

break;

case /firefox/.test(userAgent):

browserName = 'firefox';

break;

case /opera/.test(userAgent):

browserName = 'opera';

break;

default:

browserName = 'unknown';

}

console.log("browser_name : " + browserName);
console.log("device : " + device);


'Programming > javascript' 카테고리의 다른 글

IOS safari 세션 문제  (0) 2017.01.25
[javascript] 엘리먼트 사이즈 구하기  (0) 2017.01.10
카카오 SDK  (0) 2016.08.19
동영상 video tag  (0) 2016.08.19
페이스북 SDK  (0) 2016.08.19
메타태그를 공유할때 크롤링이 한번되어야 메타태그의 이미지를 불러올수 있다. 
페이스북에서 제공하는 디버그에 공유할 주소를 넣으면 메타태그에 대한 정보를 알수있다. https://developers.facebook.com/tools/debug/og/object/ 

하지만 동적인 URL을 일일이 할수 없으므로 페이스북에서 (그래프) 개체 업데이트를 제공한다. 

 api 주소
 https://graph.facebook.com/?id="해당 공유 id또는 공유 URL" &scrape=true 

 위의 주소로 POST방식으로 호출하면 된다. 
 JAVA 소스
private void facebookLinterURL(String share_url){
		String linterUrl = mapper.selectURL(share_url);
		String facebookDebugUrl = "https://graph.facebook.com/?id=";
		String facebookDebugUrlEnd = "&scrape=true";
		logger.debug("[facebookLinterURL] share_url : {}, absoluteURL : {}, fullURL : {}", 
				share_url, linterUrl, facebookDebugUrl + linterUrl + facebookDebugUrlEnd);
		URL url = null;
		HttpURLConnection connect = null;
		try {
			url = new URL(facebookDebugUrl + linterUrl + facebookDebugUrlEnd);
			connect = (HttpURLConnection) url.openConnection();
			connect.setDoInput(true);
			connect.setRequestMethod("POST");
			// 콜을해야 응답이 옴
			int response = connect.getResponseCode();
			System.out.println("[response] : " + response);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if(connect != null) connect.disconnect();
		} 
		
	}
만약 프로세스가 AWS S3에 올리고 공유결과를 DB에 저장하고 보여주는 프로세서라면
DB저장 후 Controller로 결과값을 보내기 전에 위의 소스를 한번실행시켜 
크롤링을 하면 메타데이터의 이미지를 공유창에서 볼수 있다.


'Programming > SNS' 카테고리의 다른 글

[BAND] 네이버 밴드 공유  (0) 2017.02.03

안드로이드 웹 개발시에 크롬으로 손쉽게 디버깅 하는 방법을 공유합니다.이 포스트는 아래 링크를 통해서 시도해본 결과를 공유한 것입니다.

따라서 아래 링크를 따라하셔도 됩니다.
https://developers.google.com/chrome-developer-tools/docs/remote-debugging?hl=ko 

먼저 원리는 간단합니다.

안드로이드에 크롬을 설치하고,USB로 PC로 연결하고,PC의 크롬에서 인식하는 방식입니다. 

좀더 자세히 설명하면,

  1. 1. 안드로이드에서 크롬을 설치하고요.(버전 32 이상!)
  2. 2. USB로 PC에 연결합니다.(별다른 SW 설치 없이 그냥 연결입니다)
  3. 3. 안드로이드 환경설정에서 개발자옵션을 켜고, USB디버깅을 활성화(아래 그림 3가지 참고)
  4. 4. PC에 설치된 크롬에서 기기를 찾습니다. (주소창에 about:inspect)

3단계부터 조금 자세히 알아보겠습니다.

3. 안드로이드 환경설정에서 개발자옵션을 켜고, USB디버깅을 활성화

갤럭시노트2 android 4.3 기준 화면입니다.

환경설정-디바이스정보-빌드번호항목을 찾습니다 여기서 빌드번호를 7차례 클릭합니다 (꾹 여러번 눌러보세요) 이후 개발자옵션이 활성화 됩니다.(치트키 같죠?) >#halfview

아래는 빌드번호를 누룬 다음에 활성회돤 ‘개발자옵셥’메뉴항목입니다 >#halfview

그다음은 개발자옵션을 클릭하고 들어가면 ‘USB 디버깅’ 이라는 것이 보입니다. 이걸 활성화하시면 됩니다 >#halfview

이것으로 안드로이드 기기에서 할 일은 모두 끝났습니다.(안드로이드에 설치한 크롬에서 뭔가 할 게 없어요)

**4. PC에 설치된 크롬에서 기기를 찾습니다. **

PC의 크롬을 실행한 후 주소창에 ‘chrome://inspect’ 입력합니다. 다음과 같은 화면을 볼 수 있습니다.

연결된 기기가 보입니다 #border

기기 정보가 보이면 성공한 것입니다.

이제 안드로이드 폰의 크롬을 실행해서 원하는 웹사이트 접속합니다. 그 리스트가 PC 크롬화면에서 계속 보여야 합니다.

inspect 를 클릭해보세요. 크롬개발자도구가 나오면서 모바일웹화면의 DOM을 분석 할 수 있습니다.

디버깅을 할 수 있다고요! #border

추가로 한가지 더 간단히 해볼만한 것이 있네요.

PC에서 개발중인 localhost 서버를 모바일웹에서 볼 수 있습니다. 먼저 PC의 크롬을 열고 주소창에 chrome://inspect 을 입력해서 접속 한 후 ‘Port forwarding’ 이라고 나오는 버튼을 누르면 8080 이라는 부분이 설정되어 있습니다. 만약 8080 포트로 서비스중인 로컬 서비스가 있다면 바로 안드로이드 브라우저에서 PC의 로컬서비스에 접속해서 테스트 할 수 있습니다.

#halfview #border #halfview #border

이후에 안드로이드기기의 크롬에서 ‘http://localhost:8080’를 입력 후에 접속해보세요. PC개발 중인 localhost서버를 바로 모바일웹에서도 볼 수 있습니다. 제가 다른 IP로 설정후에 동작시켜보니 빨간불이 나오고…동작이 잘 안되네요. (아직 답을 찾지 못했어요)

모바일웹은 특히나 디버깅방법을 잘 아는 것이 시간절약 측면에서 중요한 것 같습니다. 몇 년전보다 훨씬 편리한 방식들이 속속히 나오고 있는 것 같네요.

모두 즐거운 모바일웹 개발이 되시길~

//페이스북 앱 아이디
 
// 공유될 게시물 제목

//공유될 게시물 URL 
 
// 공유될 타입
 
// 공유될 게시물 이미지

// 공유될 게시물 설명

 <script type="text/javascript">

var formFile = document.getElementById('file').files[0];
var formData = new FormData();
formData.append('file', formFile);
formData.append('video_duration', Math.floor(aud.duration));

var url = "api 호출 url";

$.ajax({
	url: url,
	type: "POST",
	dataType: "json",
	data: formData,
	processData: false,
	contentType: false,
	success: function(data) {
			console.log(data);
		}
	}, error: function(request,status,error) {
		console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
	}
});

 </script>
INPUT type file로 파일 업로드 구현 스크립트


//script
$(document).ready(function() {
	
	$('#file').change(function(){
		
		var fileInput = document.getElementById('file');
		var file = fileInput.files[0];
	    var reader = new FileReader();
	    reader.onload = function() {
		
	        var aud = new Audio(reader.result);
	        aud.onloadedmetadata = function(){
			
				// 동영상 파일의 재생 길이(초)
				console.log(aud.duration);
							
				// input file을 가져옴
				var formFile = document.getElementById('file').files[0];
				console.log(formFile);
				var formData = new FormData();
				formData.append('file', formFile);
				formData.append('video_duration', Math.floor(aud.duration));
			
				var url = "API 호출 URL";
				
				$.ajax({
					url: url,
					type: "POST",
					dataType: "json",
					data: formData,
					processData: false,
					contentType: false,
					success: function(data) {
						console.log(data);
					}, error: function(request,status,error) {
						console.log("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
					}
				});
	    		
	    	}
	    }
	    
	    reader.readAsDataURL(file);	
		
	});

JSP
 
		
//JSP
컨트롤러
 

//CONTROLLER
@ResponseBody
@RequestMapping(value="해당 URL", method=RequestMethod.POST)
public Response testUpload(
		// script에서 append한 객체를 map으로 받음
		@RequestParam Map map, 
		// multipart file을 part로 받음 
		@RequestPart(value="file", required=false) MultipartFile file,
		HttpSession session,
		HttpServletRequest request) throws JsonProcessingException {
	
	DataMap dataMap = new DataMap(map);
	dataMap.put("file", file);
	
	logger.debug("dataMap {} ", dataMap);
	
	DataMap result = service.insetVideoTest(dataMap);
	
	return ResponseUtil.responseResult(result);
}

'Programming > jQuery' 카테고리의 다른 글

[jquery] 패스워드 에러 표현 innerHtml  (0) 2017.03.27
JQuery.each()  (0) 2015.07.15
[jQuery] function 정의  (0) 2015.07.02

+ Recent posts