'ITWeb/개발일반'에 해당되는 글 489건

  1. 2011.11.22 Javascript queryString 맛보기
  2. 2011.11.21 Mobile Browser 에서 URI 맛보기.
  3. 2011.11.18 Device APIs Working Group
  4. 2011.11.17 javascript apply 와 call 맛보기. 2
  5. 2011.11.17 javascript substring 과 substr 맛보기.
  6. 2011.11.16 XMLHttpRequest 알아보기.
  7. 2011.11.14 <div> 내 text 에 vertical-align 적용하기.
  8. 2011.11.11 <div> sliding 맛보기.
  9. 2011.11.11 Mobile Marketing Association...
  10. 2011.11.10 javascript event 맛보기.

Javascript queryString 맛보기

ITWeb/개발일반 2011. 11. 22. 11:15
가끔 Server Side 말고 Client 만 가지고 queryString 처리를 해야 할 때가 있습니다.
그래서 그냥 하드코딩 올려 봅니다.

[참고URL]
http://www.w3schools.com/jsref/jsref_split.asp
http://www.w3schools.com/jsref/obj_location.asp
http://www.w3schools.com/jsref/prop_loc_href.asp

// 예) http://www.my.com/index.html?width=320&height=48&allow=my.com

<script type="text/javascript">

var href = window.location.href;

var queryString = href.split('?');

var params = queryString[1].split('&');

var size = params.length;


for ( var i=0; i<size; i++ ) {

var param = params[i].split('=');
        alert('KEY : ' + param[0] + "\n" + 'VALUE : ' + param[1]);

}

</script>



[추가정보]
- document.URL : 읽기 전용으로 동일한 정보를 가져 옵니다.
- document.location : 읽기/쓰기 가능 하며 동일한 정보를 가져 옵니다.
- location.search : ?width=320&height=48&allow=my.com 이 부분만 가져 옵니다.


 
:

Mobile Browser 에서 URI 맛보기.

ITWeb/개발일반 2011. 11. 21. 16:07

Mobile Web Programming 을 하다보면 <a href=""> 여기서 href 에 들어 가는 protocol 이 어떤게 있는지 궁금할때가 있다.
그래서 맛보기로 정리를 한번 해봅니다..

상세정보는 : http://en.wikipedia.org/wiki/URI_scheme

[전화걸기]

<a href="tel:01010041004">Call</a>
- skype 에서는 callto:PHONENUMBER 로 사용합니다.


[문자보내기]

<a href="sms:01010041004">Send SMS</a>


[이메일보내기]

<a href=mailto:angel@angel.com>Send Email</a>


[지도링크걸기]

<a href="http://maps.google.co.kr/maps?q=%EA%B0%95%EB%82%A8%EB%A7%9B%EC%A7%91">구글지도보기</a>
<a href="http://m.map.naver.com/search.nhn?query=%EC%88%98%EC%9B%90%EB%A7%9B%EC%A7%91">네이버지도보기</a>
<a href="http://m.map.daum.net/actions/searchPlace?query=%EC%98%81%ED%86%B5%EB%A7%9B%EC%A7%91">다음지도보기</a>

- map 링크는 대부분 검색을 통해서 링크를 작성하게 됩니다.
- 또는 직접 검색 한 후 목적 링크를 가져와서 direct 로 작성 하시면 됩니다.


[RTSP로 동영상링크걸기 - 윈모 6.5까지는 테스트 된겁니다.]

<a href="rtsp://동영상URL">동영상보기</a>
- iOS 나 Android 에서는 그냥 http:// 로 링크 걸면 영상 재생 됩니다.

 

[Android Market보내기]

<a href="market://details?id=Package_Name">Market Package</a>
<a href="market://search?q=Search_Query">Market Search</a>
<a href="market://search?q=pub:Publisher_Name">Market Publisher Search</a>


[iOS AppStore 보내기]

<a href="itms://itunes.com/app/AppName">App Store</a>
- 이넘 이름이 좀 이상하다고 느껴 지는건 Itunes Music Store (itms) 라서 그럴수 있습니다.


 

:

Device APIs Working Group

ITWeb/개발일반 2011. 11. 18. 18:23
이 워킹그룹은 2009년에 시작되었군요..
http://www.w3.org/2009/dap/

미래는 역시 Web + Mobile 이라는 생각을 다시한번 해봅니다.. ^^

웹개발자라서 행복한 1인!!!


SpecificationInternal draftPublic Working draftStable draft (Last Call)Implementors feedback (CR)Standard (Rec)Test SuiteNotes
Priority APIs
Battery status04 Nov 2011 15 Sep 2011 Nov 2011 Managed by the Device Status API task force
Contacts (reading from addressbook)31 Aug 2011 9 Dec 2010 16 Jun 2011 draft
HTML Media Capture (camera/microphone interactions through HTML forms)06 Apr 2011 14 Apr 2011 Waiting for implementation/UX experience
Relation to HTML5?
Messaging (SMS, MMS, emails)04 Jul 2011 14 Apr 2011
Network Information API04 Nov 2011 7 June 2011 Managed by the Device Status API task force
Sensor API11 Nov 2011
Vibration API17 Nov 2011 17 Nov 2011
Other
Application Registration Discussions around Web Intents (possibly as a joint deliverable with theWeb Apps WG)
Calendar05 May 2011 19 Apr 2011 Dependency on TZDate
Feature Permissions31 Oct 2011 Originally developed by Web Notifications WG
Media Capture API (programmatic access to camera/microphone)02 Dec 2010 28 Sep 2010 Programmatic API that completes the form based approach
Will very likely migrate toward getUserMedia() as a joint deliverable with theWeb RTC Working Group?
Menu API
Permissions for Device API Access30 Sep 2010 5 Oct 2010
At risk
Audio Volume (read only) WG Not planning to work on this
Beep WG Not planning to work on this
Gallery (stored media interactions)04 Nov 2010 Relates to API for Media Resource?
Systems info and events (CPU, network, etc.)16 Mar 2011 2 Feb 2010 Will likely need to be vastly reworked
Tasks No editor — currently at risk, probably to be merged into calendar API
Informative documents
APIs Requirements05 Jan 2011 15 Oct 2009
Device API Access Control Use Cases and Requirements16 Mar 2011 17 March 2011
Privacy Requirements23 Jun 2010 29 Jun 2010
Web Application Privacy Best Practices27 Oct 2011 4 August 2011
Exploratory work
Discovery
Privacy Ruleset6 Oct 2010

 
:

javascript apply 와 call 맛보기.

ITWeb/개발일반 2011. 11. 17. 10:50
이전에 작성한 글중에 일부 내용이 있습니다.
http://jjeong.tistory.com/161 

javascript 에서 클래스와 상속 관련에 대한 내용으로 다뤘던 내용이구요.
여기서도 가볍게 상기시키는 관점에서 올려 봅니다.

[Function.apply]

Syntax :
  Function.apply(thisArg[, argArray])

thisArg 는 상속 받을 클래스를 지시합니다.

java 를 예로 들면
  public class OneClass extends InheritClass {
  }

여기서 OneClass 가 thisArg 가 됩니다. (OneClass 에서 InheritClass 의 member 들을 상속 받죠.)
JavaScript 에서 apply 를 사용하게 되면 thisArg 의 클래스로 상속을 해주게 됩니다.
아래 예를 보시면 이해가 쉬우실 겁니다. 

Example :

  function Car(make, model, year) {

    this.make = make;

    this.model = model;

    this.year = year;

  }

 

  function RentalCar(carNo, make, model, year) {

    this.carNo = carNo;

    Car.apply(this, new Array(make, model, year));

  }
보시면 RentalCar 클래스는 Car 클래스를 상속 받게 됩니다.
Javs 로 표현해 보면
  public class RentalCar extends Car {
  }

가 되겠죠. 



[Function.call]

Syntax :
  Function.call(thisArg[, arg1[, arg2[, ...]]])

apply 와 동일 합니다.
다만, argument 전달 방식이 array 냐 list 냐의 차이이고 동일하게 동작을 합니다. 

Example :

  function car(make, model, year) {

    this.make = make;

    this.model = model;

    this.year = year;

  }

 

  function hireCar(carNo, make, model, year) {

    this.carNo = carNo;

    car.call(this, make, model, year);

  } 


[참고사이트]
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Apply
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Call



:

javascript substring 과 substr 맛보기.

ITWeb/개발일반 2011. 11. 17. 09:03
흔히 많이 사용하는 함수 인데 워낙에 다양한 개발언어를 쓰다보면.. 가끔 문법이 헷갈릴때도 있죠..!!
그래서 정리 하는 습관을 저는 그냥.. 블로그에 정리 하는 걸로 한답니다.. 그래서 맛보기 들어가보죠.. ㅎㅎ

[참고사이트]
http://www.w3schools.com/jsref/jsref_substring.asp
http://www.w3schools.com/jsref/jsref_substr.asp

string.substr(start, length)
- length 부분은 옵션 이구요.
- 의미는 start index 부터 length 길이 만큼.. return 합니다.
- length 가 없으면 그냥 start index 부터.. 끝까지.. 쭈욱...


string.substring(from, to)
- from index 부터 to index 까지 잘라서 return 합니다.
- 역시 to 도 옵션이기 때문에 없으면 끝까지.. 쭈욱...


샘플 코드는 참고사이트 보시면 됩니다. :)
:

XMLHttpRequest 알아보기.

ITWeb/개발일반 2011. 11. 16. 15:20
[참고사이트]


[XMLHttpRequest 생성하기]

- xhr = new XMLHttpRequest();

  . 이제는 일반적으로 이넘으로 사용을 하자.

- xhr = new ActiveXObject("Microsoft.XMLHTTP");
  . IE5, 6을 지원하기 위한건데.. 이제 이넘들은.. 버리죠.. :) 


[XMLHttpRequest Interface 알아보기]
- Level2 에 있는 Interface 정보를 긁어온 내용입니다.
[NoInterfaceObject]
interface XMLHttpRequestEventTarget : EventTarget {
  // event handlers
           attribute Function onloadstart;
           attribute Function onprogress;
           attribute Function onabort;
           attribute Function onerror;
           attribute Function onload;
           attribute Function ontimeout;
           attribute Function onloadend;
};

interface XMLHttpRequestUpload : XMLHttpRequestEventTarget {

};

[Constructor]
interface XMLHttpRequest : XMLHttpRequestEventTarget {
  // event handler
           attribute Function onreadystatechange;

  // states
  const unsigned short UNSENT = 0;
  const unsigned short OPENED = 1;
  const unsigned short HEADERS_RECEIVED = 2;
  const unsigned short LOADING = 3;
  const unsigned short DONE = 4;
  readonly attribute unsigned short readyState;

  // request
  void open(DOMString method, DOMString url);
  void open(DOMString method, DOMString url, boolean async);
  void open(DOMString method, DOMString url, boolean async, DOMString? user);
  void open(DOMString method, DOMString url, boolean async, DOMString? user, DOMString? password);
  void setRequestHeader(DOMString header, DOMString value);
           attribute unsigned long timeout;
           attribute boolean withCredentials;
  readonly attribute XMLHttpRequestUpload upload;
  void send();
  void send(ArrayBuffer data);
  void send(Blob data);
  void send(Document data);
  void send([AllowAny] DOMString? data);
  void send(FormData data);
  void abort();

  // response
  readonly attribute unsigned short status;
  readonly attribute DOMString statusText;
  DOMString getResponseHeader(DOMString header);
  DOMString getAllResponseHeaders();
  void overrideMimeType(DOMString mime);
           attribute DOMString responseType;
  readonly attribute any response;
  readonly attribute DOMString responseText;
  readonly attribute Document responseXML;
};

[Constructor]
interface AnonXMLHttpRequest : XMLHttpRequest {
};

[XMLHttpRequest 구현 알아보기]
- 참고링크 
 
. header filed : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 

# 기본 XMLHttpRequest 구현체
<script type="text/javascript">
//<![CDATA[

var XHR = {

conn:null,

request:{

url:'',

method:'GET',

data:'',

async:true

},

header:{

key:[],

value:{}

},

data:{

key:[],

value:{}

},

response:{

type:"XML"

},

createConnection:function () {

if ( typeof window.XMLHttpRequest ) {

this.conn  = new XMLHttpRequest();

} else if ( typeof window.ActiveXObject ) {

this.conn = new ActiveXObject("Microsoft.XMLHTTP");

}

return this.conn;

},

createRequestData:function () {

var size = this.data.key.length;

for ( var i=0; i<size; i++ ) {

this.request.data += this.data.key[i] + '=' + this.data.value[this.data.key[i]] + '&';

}

this.request.data = this.request.data.substr(0, this.request.data.length - 1);

return this.request.data;

},

createRequestHeader:function () {

var size = this.header.key.length;

for ( var i=0; i<size; i++ ) {

this.conn.setRequestHeader(this.header.key[i], this.header.value[this.header.key[i]]);

}

},

open:function () {

var requestUrl;

if ( this.request.method == 'GET' ) {

requestUrl = this.request.url + '?' + this.request.data;

} else {

requestUrl = this.request.url;

}

this.conn.open(this.request.method, requestUrl, this.request.async);

},

send:function () {

if ( this.request.method == 'GET' ) {

this.conn.send();

} else {

this.conn.send(this.request.data);

}

}

}

//]]>
</script> 


# Client 페이지
<!DOCTYPE html>

<html>

<head>

<title>XMLHttpRequest</title>


<script type="text/javascript">

//<![CDATA[

XHR.request.url = "http://192.168.1.1/api/request/index.html";

XHR.request.method = "GET"; // "POST";

XHR.header.key = ["Content-Type"];

XHR.header.value = {

"Content-Type":"application/x-www-form-urlencoded"

};

XHR.data.key = ["id", "s", "ts"];

XHR.data.value = {

    "id":12345678,

    "s":"320x48",

    "ts": Math.floor(new Date().getTime()/1000)

};
 

function xhrRequest() {

XHR.createConnection();

XHR.createRequestData();

/*

response event 처리를 위해서 별도로 수행해야 하는 함수를 추가 작성함.
각 biz 특성에 맞는 기능 구현. 

*/ 

XHR.conn.onreadystatechange = function () {

switch ( XHR.conn.readyState ) {

case 0 : // XHR.conn.UNSENT :

break;

case 1 : // XHR.conn.OPENED :

break;

case 2 : // XHR.conn.HEADERS_RECEIVED :

break;

case 3 : // XHR.conn.LOADING :

break;

case 4 : // XHR.conn.DONE :

doReadyStateChange();

break;

}

function doReadyStateChange() {

if ( XHR.conn.status >= 200 && XHR.conn.status < 300 ) {

testConsole(XHR.conn.responseXML.getElementsByTagName("cid")[0].childNodes[0].nodeValue);

} else if ( XHR.conn.status == 404 ) {

alert('Not Found.');

} else {

alert(XHR.conn.status);

}

};


XHR.open();

XHR.createRequestHeader();

XHR.send();

}


function testConsole (log) {

var console = document.getElementById("console");

console.innerHTML = log + '<br>' + console.innerHTML;

}

//]]>

</script> 

</head>

<body>

<button onclick="xhrRequest();">XMLHttpRequest Call</button>

<div id="console" style="width:800px; height:400px"></div>

</body>

</html> 


# index.html 에서 return 해주는 XML
<?php

header('Content-Type: text/xml; charset=utf-8');

?>

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<result>

    <item>

        <cid>1234567890</cid>
        <name>Henry</name> 

    </item>

</result>



여기까지 아주 기본적인 구현을 해봤습니다.
넘겨 받은 XML 값에 대한 parser 는 위에서 처럼 DOM 을 이용해서 할 수도 있고, jquery 같은 라이브러리를 이용해서도 쉽게 할 수 있습니다.

XML Parser 관련해서는 혹시나 해서 예전에 작성해 놓은 글 링크 합니다.
http://jjeong.tistory.com/385

위에 작성된 코드는 말 그대로 Spec 문서에 기초해서 작성한 것입니다.
이와 관련해서 HTML5 에서 제공하는 WebSocket 도 알아 놓으면 좋겠다.
http://jjeong.tistory.com/485







:

<div> 내 text 에 vertical-align 적용하기.

ITWeb/개발일반 2011. 11. 14. 09:51

Text 의 vertical align 을 잡아 주기 위해서는 물리적인 높이의 기준이 필요 합니다.
그래서 div 의 line-height 를 명시해 줘야 해당 property 를 적용 시킬 수 있습니다. 
inline 코드로 작성 합니다.

[예제코드]

<div style="vertical-align:middle; line-height:48px; width:320px; height:48px; background:#000000; color:#FFFFFF;" >Text Vertical Align : Middle</div>



 
:

<div> sliding 맛보기.

ITWeb/개발일반 2011. 11. 11. 17:19
HTML, JavaScript 를 전혀 모르는 사람에게 어떻게 만드냐고 물오보길래.. 그냥 노가다로 coding 해 줬습니다.
그냥 버리긴 그래서.. ㅋㅋ
뭐.. 기냥 <div> 에 text 나 image 같은거 넣어 놓고.. 흐르는게 된다만 보여준 코드 임돠..(기교 전혀 없음)
다만, 같은 코드 이렇게도 쓴다. 뭐.. 그렇죠..ㅋ
(말씀 드렸듯이 노가다 이기 때문에 chrome 에서만 돌려본거구요.. 크로스브라우징 고려 안된겁니다. 그래봐야 IE 에서만 안될 것 같긴 하내요.. )

 

<!DOCTYPE html>

<html lang="ko">

<head>

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


<script type="text/javascript">

var loopTimer;


function start() {

var adWrap = document.getElementById("sahAdWrap1");

loopTimer = window.setInterval("loop()", 10);

}


function stop() {

var adWrap = document.getElementById("sahAdWrap1");

window.clearInterval(loopTimer);

}


function loop() {

var adWrap = document.getElementById("sahAdWrap1");

var debug = document.getElementById("sahDebug");

var coordy = 1;

var left = adWrap.style.left;

var leftCoord = parseInt(left.substring(0, left.length - 2), 10);

if ( leftCoord < window.innerWidth ) {

leftCoord += coordy;

} else {

leftCoord = 0;

}

debug.innerHTML = leftCoord + "<br>" + debug.innerHTML + "<br>";

adWrap.style.left = leftCoord + "px";


}


var slide = {

loopTimer:null,

start:function () {

var adWrap = document.getElementById("sahAdWrap2");

slide.loopTimer = window.setInterval("slide.loop()", 10);

},

stop:function ()  {

var adWrap = document.getElementById("sahAdWrap2");

window.clearInterval(slide.loopTimer);

},

loop:function () {

var adWrap = document.getElementById("sahAdWrap2");

var debug = document.getElementById("sahDebug");

var coordy = 1;

var left = adWrap.style.left;

var leftCoord = parseInt(left.substring(0, left.length - 2), 10);

if ( leftCoord < window.innerWidth ) {

leftCoord += coordy;

} else {

leftCoord = 0;

}

debug.innerHTML = leftCoord + "<br>" + debug.innerHTML + "<br>";

adWrap.style.left = leftCoord + "px";

}

}

</script>

</head>

<body>


<div id="sahAdWrap1" style="position:relative; top:0; left:0; width:320px; height:48px; background:#000000; color:#FFFFFF;" onmouseover="stop();" onmouseout="start();">Text Sliding....</div>

<br>

<button onclick="start();">Start</button> | <button onclick="stop();">Stop</button> | <button onclick="document.location.reload(true)">Reset</button>

<br>

<div id="sahAdWrap2" style="position:relative; top:0; left:0; width:320px; height:48px; background:#000000; color:#FFFFFF;" onmouseover="slide.stop();" onmouseout="slide.start();"><img src="bn.png" width="320" height="48" border="0" ></div>

<br>

<button onclick="slide.start();">Start</button> | <button onclick="slide.stop();">Stop</button> | <button onclick="document.location.reload(true)">Reset</button>

<div id="sahDebug"></div>


</body>

</html>

:

Mobile Marketing Association...

ITWeb/개발일반 2011. 11. 11. 10:42
Mobile Web 광고 관련 자료를 찾다가 얻어 걸린.. 사이트 임돠.. 

http://mmaglobal.com/main 

괜찮은 자료들이 많이 있내요.. ㅎㅎ
아래 사이트랑도 알아 두시면 좋을 듯 합니다.

http://www.iab.net
Interactive Advertising Bureau (IAB) 
:

javascript event 맛보기.

ITWeb/개발일반 2011. 11. 10. 17:12

그냥 맛보기로 ㅎㅎ

[참고URL]
http://www.quirksmode.org/js/introevents.html
http://www.quirksmode.org/js/events_early.html


javascript 에서 event 를 다루는 것은 매우 중요 합니다.
뭐 이런건 이야기 하지 않아도 잘 아실것 같고요.. ^^

event preventing 관련해서 뭐 좀 보다가.. 걍.. 맛보기로만 정리해 보아요..

[맛보기코드]

<!DOCTYPE html>

<html lang="ko">

<head>

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

<script type="text/javascript">

//<![CDATA[

function doSomething(url) {

var d = new Date();

location.href =  url + '?dummy=' + d.getTime();

}

//]]>

</script>

</head>

<body>

<a href="http://192.168.1.1/index.html" onclick="doSomething(this.href); return false;">doSomething!!</a>

</div>

</body>

</html>

- 이 맛보기 코드의 동작은 click 이벤트 발생 시 doSomething(..) 함수가 동작하게 되고 page 가 전환 됩니다.
- 결과적으로 <a href=""> 의 href 기본 동작은 작동하지 않게 되는 것입니다.
- 이유는 onclick="....; return false;" 때문입니다.
- 만약 onclick 시 doSomething() 동작 후 기본 동작이 실행 되게 하고 싶다면 return true; 로 변경을 하시면 됩니다.


※ Event bubbling 이나 preventing 관련해서는 위의 URL 들을 참고하세요.
※ 간혹 어떤 분들은 href 와 onclick 중 어떤게 먼저 동작하냐고 물으시는 분들이 있는데요.. ^^;; 당연히 event(onclick) 가 먼저 발생 합니다.




 
: