[Javascript] get으로 넘어온 파라미터를 Object 형태로 변환

Posted by Find my true self Fimtrus
2014.10.21 13:38 Programming/Web

아래와 같이 데이터가 주소에 포함되어 있을 때,


하나하나 꺼내오려면 상당히 귀찮다(어렵진 않지만...)


http://fimtrus.tistory.com/1?data1=123&data2=1234


화면이 로딩되는 시점에서 아래 function을 넣어주면 


주소에 포함되어 있는 파라미터 값들을 편하게 들고 올 수 있다.



/**
 * @author jonghyun.jeong
 * @since 2014.04.01
 * URL과 함께 넘어온 데이터들을 리턴한다.
 */
function getUrlValue( key ) {
	var valueObject = {}, hash, value;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++) {
    	hash = hashes[i].split('=');
    	valueObject[hash[0]] = hash[1];
    }
    
    if ( key ) {
    	
    	if ( valueObject[key] ) {
			return valueObject[key];
		}
    	
    	return "";
    }
    
    return valueObject;
}



getUrlValue() 처럼 인자 값을 넘기지 않을 경우 주소에 포함되어 있는 모든 데이터를 Object 형태로 리턴하고


getUrlValue("data1") 처럼 인자 값을 넘길 경우, 해당하는 키의 value만 리턴한다. 없을 경우 "" 을 리턴.



이 댓글을 비밀 댓글로

자바스크립트 난독화(패킹, 언패킹)

Posted by Find my true self Fimtrus
2014.10.14 10:44 Programming/Web

자바스크립트는 "소스보기"를 통해 외부에 노출된다.

(아래는 모 사이트 난독화 적용화면)




그러기에 더욱 난독화의 적용이 필요하다.(난독화를 적용한다고 해서 소스 분석이 안되는 것은 아니다. 단지 보기 힘들뿐)


웹을 통해 난독화를 적용시킬 수 있는 사이트를 소개한다.



난독화 (click)

난독화 해제 (click)



출처 : 박종명의 아름다운 개발

이 댓글을 비밀 댓글로

[Chrome] 텍스트가 올바르게 표시되지 않음

Posted by Find my true self Fimtrus
2014.08.28 21:29 Application/etc.

Chrome에 문자가 표시되지 않는 문제 해결

  1. Chrome을 시작합니다.
  2. 주소창에 chrome://flags#disable-direct-write을 입력합니다.
  3. 'DirectWrite 사용 중지' 항목을 찾아 ‘사용’을 클릭합니다. (‘사용'을 클릭하면 DirectWrite 사용을 중지하게 됩니다. DirectWrite의 배경이 흰색으로 바뀌었는지 확인하세요. )


출처 : 크롬

이 댓글을 비밀 댓글로
    • 2014.09.26 16:59
    비밀댓글입니다
    • 죄송해요.. 공지사항에 댓글이 달리는줄 알고 있어서..

      공지사항만 확인 했었네요..

      늦었지만 사과드립니다.

안드로이드 용 크롬 웹 디버깅. Web debuging on Android.

Posted by Find my true self Fimtrus
2014.08.22 14:41 Application/Android

예전에는 아래와 같은 방법으로 불편(?)하게 디버깅을 했었는데


킷캣 이상버전부터는 앱에 내장되어 있는 웹뷰에 대해서도 디버깅을 지원한다.

(앱에 약간의 코딩을 해준다면...)


먼저 킷캣 이하버전에선 아래의 코드가 동작을 하지 않기 때문에 킷캣이상에서만 웹뷰에 대한 디버깅을 활성화 시켜준다.


웹뷰가 초기화 되기 전에 해당 부분이 실행되도록 해주면 된다.


보통 2번 코드를 많이 사용하는데, 


배포버전에 디버깅이 가능하도록 설정되어 있을 경우 코드 인젝션을 통해 앱 보안을 위협할 수도 있기 때문이다.


그래서 2번을 추천한다.


//1.킷캣 이상인 경우 무조건 웹뷰 디버깅이 가능하도록.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
      WebView.setWebContentsDebuggingEnabled(true);
}
//2.아래 코드는 킷캣 이상인 경우, 그리고 디버깅이 가능한경우
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    if (0 != (getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE))
    { WebView.setWebContentsDebuggingEnabled(true); }
}



위의 코드가 삽입된 앱을 설치하고, 단말기를 컴퓨터에 연결해준다.


크롬을 실행시키고 주소창에 아래 커맨드를 입력하면~!


chrome://inspect/#devices


짠~~하고 아래 사진과 같이 해당 단말기에 설치되어 있는,


디버깅이 가능한 앱 리스트가 보인다.

debugging picture사진출처 : 크롬

사진 출처 : 크롬 개발자 페이지(https://developer.chrome.com/devtools/docs/remote-debugging)



요즘 하이브리드앱이 대세인데... 위와 같은 방법으로 디버깅을 하면 조금더 수월한 개발을 할 수 있어서 좋다.


자세한 내용이 필요하다면 아래 링크로 이동해서 보면 됨~!


크롬 개발자 사이트로 이동~!




==============================================================================


1.터미널 또는 커멘드 창에 아래 명령어를 입력.


adb forward tcp:9222 localabstract:chrome_devtools_remote



2. PC용 크롬 주소창에 입력


localhost:9222


그리고... 당근 adb가 설치되어 있어야겠죠..



이 댓글을 비밀 댓글로

[Javascript] Iframe document 얻기.

Posted by Find my true self Fimtrus
2014.08.13 15:09 Programming/Web

query에는 css 선택자를 넣어주면된다

ex) getFrameDocuement("#frame1");


function getFrameDocument( query ) {
	var frame = document.querySelector( query );
	if (frame == null)
		return;

	var frameDocument = frame.contentWindow || frame.contentDocument;
	return frameDocument;
}


이 댓글을 비밀 댓글로

[Javascript] String byte check. 스트링 바이트 체크 (한글).

Posted by Find my true self Fimtrus
2014.08.13 14:38 Programming/Web

자바스크립트에서 스트링 길이를 구할 때, 한글 길이와 영문길이를 같이 계산하는 경우가 대부분이다.


하지만, 한글의 경우 2byte로 계산해야 정상적인 계산이라고 볼 수 있는데,


구글링 중 어느 블로그를 통해 계산법에 대해 알게 되었다.


현재 string의 byte 수를 구하는 function 이다.


String.prototype.getBytes = function() {
	var contents = this;
	var str_character;
	var int_char_count;
	var int_contents_length;

	int_char_count = 0;
	int_contents_length = contents.length;

	for (k = 0; k < int_contents_length; k++) {
		str_character = contents.charAt(k);
		if (escape(str_character).length > 4)
			int_char_count += 2;
		else
			int_char_count++;
	}
	return int_char_count;
}


그리고 조금더 응용해서 


입력된 숫자 만큼의 길이의 스트링을 리턴해준다.


String.prototype.getStringFromByteLength = function( byteLength ) {
	var contents = this;
	var str_character;
	var int_char_count;
	var int_contents_length;
	
	var returnValue = "";
	
	int_char_count = 0;
	int_contents_length = contents.length;
	
	for (k = 0; k < int_contents_length; k++) {
		str_character = contents.charAt(k);
		if (escape(str_character).length > 4)
			int_char_count += 2;
		else
			int_char_count++;
		
		if ( int_char_count > byteLength ) {
			break;
		}
		returnValue += str_character;
	}
	return returnValue;
}



위의 function은 출처가 어딘지 모르겠네요...


혹시 직접 만드신분이 보신다면...댓글 부탁드려요~


이 댓글을 비밀 댓글로

[Javascript] 자바스크립트에서 replaceAll 하기.

Posted by Find my true self Fimtrus
2014.08.08 15:26 Programming/Web

자바에서는 친절하게 replaceAll을 제공하지만 


자바스크립트는 제공하지 않는다.


결국 해당 function을 만들어주는 수 밖에 없다..


마찬가지로 웹페이지 로드될 때, 아래코드를 추가시켜주면된다.


String.prototype.replaceAll = function() { 
	var a = arguments, length = a.length;
	
	if ( length == 0 ) {
		return this;
	}
	
	var regExp = new RegExp( a[0], "g");
	
	if ( length == 1 ) {
		
		return this.replace(regExp, "");
	} else {
		return this.replace(regExp, a[1]);
	}
	return this;
}



이 댓글을 비밀 댓글로

[Javacript] Array remove Index 배열 삭제

Posted by Find my true self Fimtrus
2014.08.08 14:28 Programming/Web

자바스크립트의 Array 객체 ( [] 대괄호를 통해 생성 또는 new Array 로 생성하는 경우) 에는 배열 객체를 삭제하거나, 인덱스를 입력받아 삭제하는 function이 없다.


물론 splice나 split 등의 function을 이용하면 되긴 하지만, 


익숙하지 않은 사람들에게는 상당히 귀찮은 작업이다.


그래서 function을 미리 만들어 놓고 사용하는데,


이것도 마찬가지로 웹페이지가 로드될 때 코드를 추가해주면


모든 Array가 아래 function들을 가지게 된다.



Array.prototype.remove = function() {
    var what, a = arguments, L = a.length, ax;
    while (L && this.length) {
        what = a[--L];
        while ((ax = this.indexOf(what)) !== -1) {
            this.splice(ax, 1);
        }
    }
    return this;
};

Array.prototype.removeIndex = function () {
	var a = arguments, length = a.length;
	this.splice ( a[--length], 1 );
	return this;
}


추가한뒤 array 객체를 보면 remove와 removeIndex가 딱!



이 댓글을 비밀 댓글로

[Javascript] Date format 추가.

Posted by Find my true self Fimtrus
2014.08.08 14:15 Programming/Web

자바스크립트에서 Date 객체에 대한 format function을 지원해 주지 않는다.


해서..... 포멧을 만들려면 상당히 귀찮은 작업을 해야하는데,


아래 코드를 웹페이지 로드될 때, 추가해주면 format function 을 사용할 수 있다.

Date.prototype.format = function(f) { if (!this.valueOf()) return " "; var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"]; var d = this; return f.replace(/(yyyy|yy|MM|dd|E|HH|hh|mm|SSS|ss|a\/p)/g, function($1) { switch ($1) { case "yyyy": return d.getFullYear(); case "yy": return (d.getFullYear() % 1000).zf(2); case "MM": return (d.getMonth() + 1).zf(2); case "dd": return d.getDate().zf(2); case "E": return weekName[d.getDay()]; case "HH": return d.getHours().zf(2); case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2); case "mm": return d.getMinutes().zf(2); case "ss": return d.getSeconds().zf(2); case "a/p": return d.getHours() < 12 ? "AM" : "PM"; case "SSS": var temp = "0000"; var milliSeconds = d.getMilliseconds(); temp = temp + milliSeconds; temp = temp.substring ( temp.length - 3 , temp.length); return temp; default: return $1; } }); };


이 댓글을 비밀 댓글로

[Android] 사진 저장 후 갤러리에 보이지 않는 경우-MediaScanner

Posted by Find my true self Fimtrus
2014.07.25 10:51 Programming/Android

개별 파일로 intent를 통해 리소스 디비 업데이트

이동~~(Click)



이번에는 폴더 전체 스캔, MediaScanner를 통해 업데이트를 해보겠습니다.


이부분도 간단하게 구현가능한데, 범용성을 위해 클래스로 뺐습니다^^;



package com.jhlibrary.util;

import android.content.Context;
import android.media.MediaScannerConnection;
import android.media.MediaScannerConnection.MediaScannerConnectionClient;
import android.net.Uri;

public class MediaScanner {
	private Context mContext;

	private String mPath;

	private MediaScannerConnection mMediaScanner; 
	private MediaScannerConnectionClient mMediaScannerClient;

	public static MediaScanner newInstance(Context context) {
		return new MediaScanner(context);
	}

	private MediaScanner(Context context) {
		mContext = context;
	}

	public void mediaScanning(final String path) {

		if (mMediaScanner == null) {
			mMediaScannerClient = new MediaScannerConnectionClient() {

				@Override
				public void onMediaScannerConnected() {
					mMediaScanner.scanFile(mPath, null); // 디렉토리
					// 가져옴
				}

				@Override
				public void onScanCompleted(String path, Uri uri) {

				}
			};
			mMediaScanner = new MediaScannerConnection(mContext, mMediaScannerClient);
		}

		mPath = path;
		mMediaScanner.connect();
	}
}


직접 구현의 경우, MediaScannerConnection 클래스를 통해 디비에 접근(?), 


파일 또는 디렉토리 전체에 대한 업데이트를  할 수 있다.


먼저 MediaScannerConnectionClient 를 객체화 해줍니다.

(이 클래스는 MediaScannerConnection에서 callback을 받기 위한 클래스입니다).


그리고  connection을 위한 MediaScannerConnection을 객체화 하면 끝~!



사용하기 위해선 아래처럼 하시면 됩니다.



MediaScanner scanner = MediaScanner.newInstance(MainActivity.this);
scanner.mediaScanning("파일경로"); 
이 댓글을 비밀 댓글로
    • 1234
    • 2015.01.23 10:34
    MediaScanner scanner = MediaScanner.newInstance(MainActivity.this);
    scanner.mediaScanning("파일경로");
    여기서 MainActivity에서 오류가나는데 왜이런거죠?
      • 1234
      • 2015.01.23 10:38
      그리고 파일경로에는 /sdcard 이런식으로 적는건가요?
    • Environment 클래스에 보면 sd카드 등 파일패스 경로가 지정되어 있습니다.

      그걸 사용하셔서 해당 파일의 위치를 지정하시면 됩니다.
    • 스르르
    • 2015.11.27 00:06
    정말정말정말 감사합니다~~ 며칠동안 고민하던거 바로 해결했어요