Total: Today: Yesterday:
연구소/이것저것 | 2016. 4. 18. 14:05 | Posted by 자수씨

20대에는 신기술에 관심이 많아서 이것저것 많이 해보고 실무에 적용도 했었는데, 30대가 되고나니 업무도 많아지고 귀찮음 때문에 신기술에 대해 관심이 점점 떨어져갔습니다.


최근에 다시 신기술에 대해 공부하다보니 너무 많은 것들이 쏟아져 나와있었습니다. 그 중 하나가 promise 패턴인데, 항상 callback 가 진리라 생각하고 불편한 상황에서도 계속 쓰고만 있었습니다.



promise 패턴은 스펙 구현체들을 로드하여 사용할 수 있는데, 최근 가장 많이 쓴는 jQuery 에서도 promise 패턴을 활용할 수 있습니다.


jQuery 에서는 ```jQuery.when(deferreds)``` 로 제공이 되며 API 에 있는 예제를 하나씩 확인해보겠습니다.



아래 예제는 ```jQuery.when()``` 의 파라미터인 ```deferred``` 가 정상적으로 처리되면 ```deferred.then``` 에서 콜백과 같은 처리를 합니다. 기존의 방식과는 달리 콜백이 중첩되지 않는 구조입니다.


### js


$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR ) {

  alert( jqXHR.status ); // Alerts 200

});



```jQuery.when()``` 의 파라미터가 Deferred 나 Promise 가 아닐 경우에는 done 콜백이 즉시 실행됩니다.

### js


$.when( { testing: 123 } ).done(function( x ) {

  alert( x.testing ); // Alerts "123"

});


파라미터가 없는 경우에도 즉시 실행됩니다.

### js


$.when().then(function( x ) {

  alert( "I fired immediately" );

});




아래는 ```jQuery.Deferred()``` 를 이용한 예제인데, 아직 잘 이해가 되지 않는 부분이 있습니다. Deferred 객체에 대해 학습 후에 다시 정리해야겠습니다.

### js


var d1 = $.Deferred();

var d2 = $.Deferred();

 

$.when( d1, d2 ).done(function ( v1, v2 ) {

    console.log( v1 ); // "Fish"

    console.log( v2 ); // "Pizza"

});

 

d1.resolve( "Fish" );

d2.resolve( "Pizza" );


### js


var d1 = $.Deferred();

var d2 = $.Deferred();

var d3 = $.Deferred();

 

$.when( d1, d2, d3 ).done(function ( v1, v2, v3 ) {

    console.log( v1 ); // v1 is undefined

    console.log( v2 ); // v2 is "abc"

    console.log( v3 ); // v3 is an array [ 1, 2, 3, 4, 5 ]

});

 

d1.resolve();

d2.resolve( "abc" );

d3.resolve( 1, 2, 3, 4, 5 );




#h3 References

https://api.jquery.com/jquery.when/

https://api.jquery.com/category/deferred-object/

연구소/Chrome Extension | 2016. 4. 1. 20:09 | Posted by 자수씨

본 포스트는 크롬 익스텐션 개발자 페이지(https://developer.chrome.com/extensions/overview)를 토대로 작성되었습니다.


그냥 공부하는 차원에서 개발자스러운 번역 중...


파일


각 익스텐션은 다음의 파일들을 가지고 있다.

  • manifest file
  • 하나 이상의 HTML files (익스텐션이 테마가 아닐 경우)
  • 옵션: 하나 이상의 JavaScript files
  • 옵션: 확장에 필요로하는 파일들 (이미지 같은)

익스텐션에 작업을 하는 동안에는 모든 파일들을 단일 폴더에 넣는다. 익스텐션을 배포할 때는 특수한 ZIP 파일(.crx 확장자를 갖는)로 컨텐츠 폴더를 패치징한다. 크롬 개발자 대시보드를 통해 익스텐션을 업로드하면, .crx 파일이 생성된다. 배포에 대한 자세한 사항은 호스팅 항목을 참조한다.




파일 참조


익스텐션에는 아무파일이나 넣을 수 있지만, 어떻게 사용할 수 있을까? 대개, 그냥 평범한 HTML 페이지에 상대 주소(URL)을 이용하여 파일을 참조할 수 있다. 아래는 images 폴더 안에 있는 파일 이름이 myimage.png 를 참조하는 예제이다.


<img src="images/myimage.png">



크롬 디버거를 이용하면 익스텐션 안에 있는 모든 파일들을 절대 주소(URL)로 접근이 가능하다.


chrome-extension://<extensionID>/<pathToFile>


URL 에서 <extensionID> 는 익스텐션 시스템에서 각 익스텐션마다 생성된 고유의 식별자이다. "chrome://extensions" 에 접속하면 로드된 모든 익스텐션의 ID 를 확인할 수 있다. <pathToFile> 은 익스텐션의 최상위 폴더에서 부터의 위치(상대주소)이다.



개발 중(패키징 전)에는 익스텐션 아이디가 변경될 수 있다. 특별하게 압축이 해제된 익스텐션의 아이디는 다른 디렉토리에서 로드하게 되면 변경될 수 있다. 개발 중에 ID 가 필요하다면 하드코딩을 막기위해 "@@extension_id" 라는 사전정의된 메시지를 이용할 수 있다.



익스텐션을 패키징 할 때(일반적으로 대시보드에 업로드 시), 익스텐션은 영속적인 ID 를 가지게 되며, 이 ID 는 익스텐션이 업데이트 되더라도 동일하게 유지된다. 한번 생성된 ID 는 영속적이며, "@@extension_id" 를 통해 실제 ID 를 사용할 수 있다.




The manifest file


manifest 파일은 "manifest.json" 에 작성되며, 대부분 중요한 파일과 익스텐션이 할 수 있는 범위와 같은 정보를 제공한다. "google.com" 의 정보를 사용하는 브라우저 액션에 대한 일반적인 manifest 파일의 예는 아래와 같다.


{

  "name": "My Extension",

  "version": "2.1",

  "description": "Gets information from Google.",

  "icons": { "128": "icon_128.png" },

  "background": {

    "persistent": false,

    "scripts": ["bg.js"]

  },

  "permissions": ["http://*.google.com/", "https://*.google.com/"],

  "browser_action": {

    "default_title": "",

    "default_icon": "icon_19.png",

    "default_popup": "popup.html"

  }

}



자세한 내용은 Manifest 파일을 참고하길 바란다.