브라우저가 어떤 종류인지를 확인하는 자바스크립트 코드이다. 
jQuery에서 $.browser.chrome과 같은 방식은 deprecated되었기 때문에 아래와 같은 방식으로 
확인할수 있다. 
아래 코드는 브라우저가 크롬인지를 확인하는 코드이다.
다른 브라우저 체크도 원리는 동일하다.

var userAgent = window.navigator.userAgent.toLowerCase();

//크롬일 경우 isChrome에는 Chrome이라는 문잘의 위치 값이 반환되고 크롬이 아닐경우는
//-1이 반환된다. 나머지도 동일
var isChrome = userAgent.indexOf('chrome');
var isEdge = userAgent.indexOf('edge');
var isIE = userAgent.indexOf('trident');

if(isChrome > -1){
	if(isEdge > -1){
		//Edge는 Chrome과 Edge 모두의 값을 가지고 있기 때문에
		alert("Edge 브라우저");
	} else {
		alert("Chrome 브라우저");
	}
} else {
	alert("Chrome이 아닙니다");
}

통상적으로 JavaScript를 통해서 이벤트 발생을 catch해서 이벤트가 발생했을 때 무엇을 어떻게 처리하라는 식의 작업은 자주하게 되는 작업이다.
예를 들어서 클릭 이벤트가 발생했을 때 무엇을 하라든지, 혹은 input 태그의 값이 변경되었을 때 무엇을 하라든지...
그런데 반대의 경우를 만나게 되는 것도 종종 발생하기도 한다. 즉 특정 이벤트를 소스 코드에서 발생 시키는 경우를 말한다. 이벤트는 보통 사용자(사람)에 의해서 발생하게 되는데 반대로 소스 코드에서 특정 이벤트를 발생시키는 경우에 대해서 포스팅하고자 한다.

아래의 소스코드는 a 태그에 필자의 블로그로 이동하는 링크를 걸었고 이것을 사용자가 클릭하면 당연히 이동하겠지만 여기서는 프로그램에서 a 태그에 대한 클릭 이벤트를 발생시켜서 블로그로 이동하는 기능을 구현한 것이다.
따라서 본 페이지로 집입하자 마자 블로그로 막바로 이동하는 효과를 나타내게 될 것이다.

<html>
	<head><title>Click 이벤트 발생시키기</title></head>
	<body>
		<a id="myBlog" href="http://developer-joe.tistory.com">Developer Joe의 블로그로 이동하기</a><br/>

	<script>
		var blogLink = document.getElementById('myBlog');
		//blogLink.fireEvent("onclick"); //IE에서 동작하는 방법
		
		//IE 이외의 경우
		var event = document.createEvent("MouseEvents");
		event.initEvent("click", false, true);
		blogLink.dispatchEvent(event);

	</script>
	</body>
</html>

HTTP로 URL 값을 전달할때 오로지 영문자와 숫자만으로 전달한다면 인코딩 디코딩이 필요 없을 것이나 실제에 있어서는 다양한 특수문자와 한글 등이 URL 값에 포함되어 전달되는데 이때 제대로 인식을 못해서 404 Not found 에러가 발생하거나 잘못된 값이 전달되는 경우가 발생할수 있다.

예를 들어 


http://www.xxx.xx/info?page=3&title=developer&enginner


이 경우 title에 developer&engineer 값이 전달되어야 겠지만 &라는 특수문자는 &문자 자체로 인식되지 않고 특수한 기능을 하는 문자로 취급되기 때문에 문제가 발생한다.


이 문제를 해결하기 위해 title의 데이터 부분만(developer&enginner) 따로 인코딩해서 보낸다면 원하던 목적을 달성할수가 있게된다.

이때 사용하는 JavaScript의 함수가 encodeURIComponent()decodeURIComponent()가 있다.


encodeURIComponent()함수는 영 대문자와 소문자, 숫자, 그리고 *-_.을 제외한 모든 문자를 유니코드 형식으로 변환한다.

1BYTE 문자는 %XX, 2BYTE 문자는 %uXXXX 형태로...


그리고 이렇게 인코딩된 문자열을 사람이 읽을수 있는 형태로 원복할려면 decodeURIComponent()를 이용하면 된다.


아래는 예제코드이다.


<!DOCTYPE html>

<html>

<body>


<p>Click the button to encode a URI and for decoding also.</p>


<button onclick="myFunction()">Now Try it</button><br/><br/>


<hr/>

"developer&enginner"이라는 문자열을 encodeURIComponent()와 decodeURIComponent()를 이용해서 인코딩과 디코딩을 테스트해 봅니다.

<hr/>


<p/>인코딩 : <span  id="enco"></span>

<p/>디코딩 : <span id="deco"></span>

<P/>최종결과 : <span id="result"></span>


<script>

function myFunction() {

    var mURL = "http://www.xxx.xx/info?page=3&title=";

    var uri = "developer&enginner";

    var res = encodeURIComponent(uri);

    document.getElementById("enco").innerHTML = res;

    

    var dc = decodeURIComponent(res);

    document.getElementById("deco").innerHTML = dc;

    //alert("decoded : " + dc);

    

    var rt = mURL + res;

    document.getElementById("result").innerHTML = rt;

}

</script>


</body>

</html>


한글의 경우도 인코딩해서 보내고 받는 쪽에서 디코딩해서 처리하면 문제가 없을 것이다.

위 코드의 실행결과는 다음과 같이 나오게 될 것이다.


인코딩 : developer%26enginner


디코딩 : developer&enginner


최종결과 : http://www.xxx.xx/info?page=3&title=developer%26enginner


jQuery attr() 함수에 대해


jQuery의 attr() 함수는 선택된 특정 element의 값을 반환하거나 해당 element에 값을 설정하거나의 동작을 하는 함수이다.


$(selector).attr(attribute)

 ⇒ 해당 attribute의 값을 반환한다.


$(selector).attr(attribute, value)

 ⇒ 해당 attribute의 값을 value의 값으로 설정한다.


$(selector).attr({attribute:value, attribute:valeu, ...})

 ⇒ 여러개의 attribute에 값을 설정하기


아래는 예제코드이다.


<!DOCTYPE html>

<html>

<head>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


<script>

$(document).read(function(){

//$("button").click(function(){

$(".orgn").click(function(){

//img some.jpg의 width를 400으로 설정하기

$("img").attr("width", 400);

});


$(".joe").click(function(){

//img some.jpg의 width 값을 반환하기

alert("Image's width : " + $("img").attr("width"));

});

});

</script>

</head>

<body>


<img src="some.jpg" alt="Some Image" width="300" height="200"><br>


<button class="orgn">이미지 width 값 설정</button><br/>

<button class="joe">Image Width 보기</button>


</body>

</html>



JavaScript의 preventDefault() 메소드에 관해


HTML에서 a 태그는 기본적으로  href가 지정한 URL로 이동하게되어 있다. 그런데 기본적인 링크 동작을 다르게 변경하거나 추가할 뭔가가 있을 때 JavaScript에서 기본적인 연결을 해제하고 JavaScript 단에서 다른 원하는 동작을 하게 할수도 있다.


<!DOCTYPE html>

<html>

<body>

<hr/>

<a id="myBlog" href="http://developer-joe.tistory.com/">코드조각 블로그로 이동</a>

<p>JavaScript의 preventDefault() 함수는 위의 링크에 있는 url 연결 동작을 해제한다.</p>


<script>

document.getElementById("myBlog").addEventListener("click", function(event){

event.preventDefault();

});

</script>


</body>

</html>



로그인 정보 입력 후 로그인 버튼을 클릭하는 방식은 작아보지만 번거러운 일이다.

따라서 로그인 정보 입력 후 엔터키로 로그인 동작이 이뤄지도록 하기 위한 자바스크립트 코드이다.


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">

<title>엔터 키로 로그인 되게</title>


<script type="text/javascript">

function onEnterLogin(){

var keyCode = window.event.keyCode;

if (keyCode == 13) { //엔테키 이면

loginForm.submit();

}

} //onEnterLogin()

</script>

</head>


<body onkeydown="javascript:onEnterLogin();">


<form action="ok.jsp" method="post" name="loginForm">

아이디 : <input type="text" name="id" value=""><br/>

비밀번호 : <input type="password" name="passwd" ><br/>

<input type="submit" value="로그인">

</form>


</body>

</html>



+ Recent posts