OSX 응용 프로그램을 자바 스크립트로 만들기

Yosemite에서 할 수 있게 된 것 같아서 만들어 보겠습니다.

조속한 소스입니다.

win.js
// Generated by CoffeeScript 1.9.0
(function() {
  var win;

  ObjC["import"]('Cocoa');

  win = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer($.NSMakeRect(0, 0, 160, 90), $.NSTitledWindowMask | $.NSMiniaturizableWindowMask | $.NSClosableWindowMask, $.NSBackingStoreBuffered, false);

  win.title = 'my win';

  win.center;

  win.makeKeyAndOrderFront(win);

}).call(this);
ObjC["import"]('Cocoa'); 에서 Cocoa 프레임워크를 가져오고 $.NSWindow 에서 창을 만듭니다.
osacompile -s -l JavaScript -o win.app win.js와 명령을 하면 win.app가 만들어지기 때문에 open win.app에서 실행할 수 있습니다.



위의 예에서는 osacompile에 -s를 건네주는 것으로 윈도우를 만드는 것만으로 완결한, 실행할 수 있는 어플리케이션을 생성하고 있습니다. 그런데osascript win.js실행하면 실행되지만 프로그램은 즉시 종료됩니다.

그래서 다음 예에서는 osascript 명령에서도 움직이도록 개선했습니다.

win2.js
// Generated by CoffeeScript 1.9.0
(function() {
  var app, win;

  ObjC["import"]('Cocoa');

  ObjC.registerSubclass({
    name: 'WinDelegate',
    superclass: 'NSObject',
    protocols: ['NSWindowDelegate'],
    methods: {
      'windowWillClose:': {
        types: ['void', ['id']],
        implementation: function(notification) {
          return app.terminate(0);
        }
      }
    }
  });

  win = $.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer($.NSMakeRect(0, 0, 160, 90), $.NSTitledWindowMask | $.NSMiniaturizableWindowMask | $.NSClosableWindowMask, $.NSBackingStoreBuffered, false);

  win.delegate = $.WinDelegate.alloc.init;

  win.title = 'my win2';

  win.center;

  win.makeKeyAndOrderFront(win);

  app = $.NSApplication.sharedApplication;

  app.setActivationPolicy($.NSApplicationActivationPolicyRegular);

  app.activateIgnoringOtherApps(true);

  app.run();

}).call(this);

$.NSApplication을 자주 준비하고, 윈도우의 클로즈에 맞추어 terminate 하도록(듯이) 하고 있습니다. 이 때 windowWillClose 메시지를 처리하기 위해 ObjC.registerSubclass를 사용합니다.
osascript win2.js 그렇다면 방금 전과 같은 창이 나타나 닫기 버튼으로 종료를 확인할 수 있다고 생각합니다.

소스 세트:
htps : // 기주 b. m / y mtmdk / sx - pjs

참고:
htps : //에서 ゔぇぺぺr. 아 ぇ. 코 m/ぃb ら ry/마 c/레ぇ 아세노테 s/인테라 p p카카치 온 코무니 카치온/R 응쟈ゔぁ Sc리 pt 후라라토 마치온/이자 x. HTML
htp // tyぇr이 w. 코 m / r 치 c ぇ s / 부이 l ぢ g - sx - ps - u thhs
ぃ tp // 이 m/자쿠로이로//ms/1b02378bf9에940602d87

좋은 웹페이지 즐겨찾기