Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃJavascript¿ª·¢OS XÓ¦ÓóÌÐò
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-10-16
  3259  次浏览      28
 

OS X YosemiteΪAutomationÒýÈëÁËJavascriptµÄÖ§³Ö¡£ÕâÈÃÔÚÔ­ÉúOS X¿ò¼ÜÖÐʹÓÃJavascript³ÉΪ¿ÉÄÜ¡£¹ýÈ¥Ò»¶Îʱ¼äÎÒÒ»Ö±ÔÚ̽Ë÷Õâ¸öÐÂÁìÓò£¬²¢ÊÕ¼¯ÁËһЩʾÀý¡£ÔÚÕâÆªÎÄÕÂÀïÎÒÏë½âÊÍһϻù±¾Ó÷¨²¢ÇҴһ¸öСµÄʾÀýÓ¦Óá£

WWDC 2014°üº¬Ò»¸öJavascript for AutomationµÄ session¡£Õâ¸ösession½²Ã÷ÁËÔÚautomateÓ¦ÓÃÀï¿ÉÒÔÓÃJavascript´úÌæAppleScriptÀ´½øÐпª·¢¡£Õâ±¾Éí¾ÍÊÇÒ»¸ö¼¤ ¶¯ÈËÐĵÄÏûÏ¢¡£Ê¹ÓÃAppleScriptÀ´×Ô¶¯»¯Öظ´ÐÔÈÎÎñÒѾ­´æÔںܳ¤Ê±¼äÁË¡£AppleScriptдÆðÀ´²¢²»ÊÇÌØ±ðÊæ·þ£¬ËùÒÔÄܹ»Ê¹ÓÃÀàËÆµÄÓï·¨ À´´úÌæ»¹ÊǺÜÊÜ»¶Ó­µÄ¡£

ÔÚsessionÀïÑݽ²Õß»¹½âÊÍÁËObjective-C bridge£¬ÕâÈÃÕû¸öÊÂÇ鿪ʼ±äµÃÌØ±ð¿á¡£bridgeÔÊÐíÄãµ¼ÈëÈκÎObjective-C¿ò¼Üµ½JSÓ¦ÓÃÀï¡£±ÈÈ磬Èç¹ûÄãÏë´î½¨Ò»¸öʹÓñê×¼OS X¿Ø¼þµÄGUIʱ£¬Äã¿ÉÒÔµ¼ÈëCocoa£º

ObjC.import("Cocoa");

Foundation¿ò¼ÜÔòºÍËüµÄÃû×ÖÒ»Ñù£¬¸øOS XÓ¦ÓÃÌṩ»ù´¡¹¹¼þ¡£Ëü°üº¬´óÁ¿µÄÀàºÍ½Ó¿Ú£¬±ÈÈçNSArray¡¢NSURL¡¢NSUserNotificationµÈµÈ¡£¿ÉÄÜÄã¶ÔÕâЩÀ໹²»ÊÇÌ«ÊìϤ£¬ µ«´ÓÃû×ÖÄã¿ÉÒԲ³öËüÃÇ´ú±íµÄÒâ˼¡£ÓÉÓÚËüÊÇÈç´ËÖØÒª£¬ÄãÎÞÐèÔÚ¿ª·¢Öе¼ÈëËü£¬ÒòΪËüÒѾ­Ä¬Èϰüº¬ÔÚÀïÃæÁË¡£

´ÓÎÒĿǰÁ˽âµÄÇé¿ö¿´£¬ÈκÎÄÜÓÃObjective-CºÍSwift¿ª·¢µÄ³ÌÐò£¬Äã¶¼ÄÜÓÃJavascriptÀ´¿ª·¢¡£

¿ª·¢Ò»¸öʾÀý³ÌÐò

×¢Ò⣺ÄãÐèÒªYosemite Developer Preview 7+À´±£Ö¤Ê¾ÀýÄܹ»Õý³£ÔËÐС£

Á˽âJavascript for AutomationµÄ×îºÃ°ì·¨ÊÇͶÈë½øÈ¥£¬²¢¿ªÊ¼ÓÃËüÀ´¿ª·¢Ò»Ð©¶«Î÷¡£ÕâÀïÎÒ½«ÑÝʾÈçºÎ´´½¨Ò»¸öС³ÌÐò£¬ÄÜÈÃÄã´ÓµçÄÔÖÐÑ¡ÔñÒ»ÕÅͼƬ²¢ÏÔʾ¡£

¿ÉÒÔ´ÓÎÒµÄʾÀý³ÌÐò²Ö¿âÀïÏÂÔØÍêÕûµÄ´úÂë¡£

ÎÒÃÇ´´½¨µÄÓ¦ÓõÄÒ»ÕŽØÍ¼

Õâ¸ö³ÌÐò°üÀ¨Ò»¸ö´°¿Ú£¬ÎÄ×Ö±êÇ©£¬ÎÄ×ÖÊäÈë¿ò£¬ÒÔ¼°°´Å¥¡£¶ÔÓ¦µÄÀàÃûÔòÊÇ£ºNSWindow£¬NSTextField£¬NSTextFieldÒÔ¼°NSButton¡£

µã»÷Choose an Image°´Å¥½«ÏÔʾһ¸öNSOpenPanelÀ´ÈÃÄãÑ¡ÔñÎļþ¡£ÎÒÃǽ«ÉèÖÃÑ¡ÔñÃæ°åÏÞÖÆËüÖ»ÄÜ´Ó.jpg/.png/.gifÀïÌôÑ¡Îļþ¡£

ÔÚÑ¡ÖÐÒ»ÕÅͼƬºó£¬ÎÒÃǽ«ÔÚ´°¿ÚÏÔʾËü¡£´°¿Ú»á×Ô¶¯µ÷Õû´óС£¬ÒÔÆ¥ÅäͼƬµÄ³ß´çÒÔ¼°¿Õ¼äµÄ¸ß¶È¡£ÎÒÃÇ»¹½«ÉèÖô°¿ÚµÄ×îС³ß´çÒÔÈ·±£¿Ø¼þÄܹ»ÍêÕûÏÔʾ¡£

ÏîÄ¿ÉèÖÃ

´ò¿ªÎ»ÓÚApplication > UtilitiesÖеÄApple Script Editor³ÌÐò¡£Ëü²»ÊÇÎÒÓùýµÄ×îºÃµÄ±à¼­Æ÷£¬µ«¶ÔÓÚÏÖÔÚÊDZØÒªµÄ£¬´î½¨JS OS X³ÌÐòÐèҪʹÓÃËüµÄÒ»Ð©ÌØÐÔ¡£ÎÒ²»Ì«Çå³þËü±³ºóµÄÔ­Àí£¬µ«Ëü¿ÉÒÔÏñ³ÌÐòÒ»Ñù±àÒëºÍÔËÐÐÄãµÄ½Å±¾¡£Ëü»¹»á´´½¨Ò»Ð©ÎÒÃÇÐèÒªµÄ¶îÍâµÄÎļþ±ÈÈç Info.plist£¬ÎÒ¹À¼ÆÆäËûһЩ±à¼­Æ÷Ò²ÓÐÕâЩ¹¦ÄÜ£¬²»¹ýÎÒ»¹Ã»À´µÃ¼°²âÊÔËüÃÇ¡£

´ò¿ª²Ëµ¥µÄFile > New»òÕß¿ì½Ý¼ücmd + nÀ´´´½¨ÐÂÎĵµ¡£ÎÒÃÇÐèÒª×öµÄµÚÒ»¼þʾÍÊǽ«ÎĵµÒÔ³ÌÐòµÄ¸ñʽ±£´æ£¬´ò¿ª²Ëµ¥File > Save»ò¿ì½Ý¼ücmd + sÀ´´ò¿ª±£´æ¶Ô»°¿ò¡£²»ÒªÁ¢¼´È·Èϱ£´æ£¬ÕâÀïÓÐÁ½¸öÑ¡ÏîÊÇÎÒÃÇÐèÒªÉèÖõġ£

Script Editor±£´æ¶Ô»°¿ò£¬ÖØÒªµÄµØ·½ÒÑÓúìÉ«±ê³ö

½«Îļþ¸ñʽ¸ÄΪ¡°Ó¦ÓóÌÐò¡±£¬È»ºóÑ¡ÖС°Stay open after run handler¡±Ñ¡Ïî¡£ÄãÒ²¿ÉÒÔÔÚÖ®ºóÀ´¸üÐÂÕâЩ±£´æÑ¡Ï´ò¿ªFile²Ëµ¥²¢°´×¡Option¼ü£¬Ëü»á³öÏÖ¡°Save as¡­¡±Ñ¡ÏÕâÀïÄã¿ÉÒÔ½øÐÐÉÏÃæµÄ²Ù×÷¡£

Èç¹ûÄ㲻ѡÖС°Stay open after run handler¡±£¬ÄãµÄ³ÌÐò»á´ò¿ª£¬µ«»áÒ»ÉÁ¶ø¹ý£¬È»ºó¹Øµô¡£

ÈÃÎÒÃÇ¿ªÊ¼coding

ÔÚÄãµÄ½Å±¾ÀïÌí¼ÓÏÂÃæÁ½ÐдúÂ룬Ȼºó´ò¿ª²Ëµ¥Script > Run Application»ò¿ì½Ý¼üopt + cmd + rÀ´ÔËÐгÌÐò¡£

ObjC.import("Cocoa");
$.NSLog("Hieverybody!");

¿ÉÒÔ¿´µ½²Ëµ¥À¸ºÍdockÉϵÄͼ±ê£¬ËµÃ÷ÎÒÃǵijÌÐòÊÇÔÚÔËÐе쬵«³ýÁËÕâ¸ö£¬Ã»ÓÐÆäËû±ä»¯¡£

´úÂëÖеġ°Hi everybody!¡±ÄÄÈ¥ÁË£¿»¹ÓÐÄǸö¡°$¡±·ûºÅ£¬ÕâÊÇjQueryÂ𣿴ò¿ª²Ëµ¥File > Quit»ò¿ì½Ý¼ücmd + q¹Ø±Õ³ÌÐò£¬ÎÒÃÇÀ´¿´¿´NSLogÅÜÄÄÈ¥ÁË¡£

ͨ ¹ýϵͳ²Ëµ¥Applications > Utilities > Console´ò¿ªConsole³ÌÐò¡£ËùÓгÌÐòÄܹ»ÔÚ¿ØÖÆÌ¨ÀïµÄÊä³öÐÅÏ¢¡£Õâ¸ö¿ØÖÆÌ¨ºÍChrome¡¢FirefoxÒÔ¼°SafariÀïµÄ¿ª·¢Õß¹¤¾ß²î²»¶à¡£Ö÷񻂿±ðÊÇÕâ¸öÊÇÓÃÀ´µ÷ÊÔ³ÌÐò¶ø²»ÊÇÍøÕ¾µÄ¡£

¿ØÖÆÌ¨³ä³â×ÅÐí¶àÐÅÏ¢£¬Äã¿ÉÒÔÔÚËÑË÷¿òÀïÊäÈëappletÀ´¹ýÂËÄãËùÐèÒªµÄ¡£ÏÖÔÚÄãÐèÒª»Øµ½Script EditorÖØÐÂÔËÐгÌÐò£¬ÍƼöʹÓÿì½Ý¼üopt + cmd +r¡£

¿´µ½Ã»ÓУ¿ÎÒÃǵġ°Hi, everybody!¡±ÒѾ­ÏÔʾÔÚ¿ØÖÆÌ¨ÀïÁË¡£

¡°$¡±´ú±íʲôÒâ˼£¿

¡°$¡±±íʾµÄÊÇÁ¬½Óµ½Objective-C bridge¡£ÐèÒªµ¼ÈëObjective-CÀà»òÕß³£Á¿£¬¾ÍÓÃ$.foo»òObjc.foo¡£ºóÃæÎÒ»¹»á½²µ½ºÜ¶àÆäËûʹÓõ½$µÄµØ·½¡£

Console³ÌÐòºÍNSLogÊǵ÷ÊÔ³ÌÐò¹ý³ÌÖв»¿É»òȱµÄ¹¤¾ß¡£Èç¹ûÄãÐèÒªÊä³ö×Ö·û´®ÒÔÍâµÄ¶«Î÷£¬ÕâÀïÓÐÎÒµÄNSLogʾÀý¡£

´´½¨´°¿Ú

ÈÃÎÒÃÇÀ´´´ÔìһЩÎÒÃÇÄÜ¿´¼û²¢ÄÜÓëÖ®½»»¥µÄ¶«Î÷¡£½«ÏÂÃæµÄ´úÂëÌæ»»Ö®Ç°½Å±¾ÖеĴúÂ룺

ObjC.import("Cocoa");

varstyleMask=$.NSTitledWindowMask|$.NSClosableWindowMask|$.NSMiniaturizableWindowMask;
varwindowHeight=85;
varwindowWidth=600;
varctrlsHeight=80;
varminWidth=400;
varminHeight=340;
varwindow=$.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer(
$.NSMakeRect(0,0,windowWidth,windowHeight),
styleMask,
$.NSBackingStoreBuffered,
false
);

window.center;
window.title="ChooseandDisplayImage";
window.makeKeyAndOrderFront(window);

±£´æ´úÂëºó£¬Ê¹Óÿì½Ý¼üopt + cmd + rÔËÐгÌÐò¡£¿´¿´ÎÒÃǵijɹû£¡½ö½ö¼¸ÐдúÂ룬ÎÒÃǾͿÉÒÔ´´½¨Ò»¸ö³ÌÐò£¬ÓµÓдò¿ªÒ»¸ö´°¿Ú²¢Òƶ¯¡¢×îС»¯ºÍ¹Ø±ÕËüµÄ¹¦ÄÜ¡£

ʹÓÃJS´´½¨µÄÒ»¸ö»ù±¾µÄNSWindow

Èç¹ûÄã֮ǰ´ÓδʹÓùýObjective-C»òCocoaÀ´Ð´³ÌÐò£¬ÉÏÃæµÄ´úÂë¿ÉÄÜ¿´ÆðÀ´Óеã»ìÂÒ¡£¶ÔÎÒÀ´Ëµ£¬´úÂëÀïµÄ·½·¨Ãû¼òֱ̫³¤ÁË£¬ÎÒϲ»¶ÃèÊöÐÔµÄÃüÃû£¬µ«Cocoa°ÑËüÍÆÏòÁËÒ»¸ö¼«¶Ë¡£

ºöÂÔÕâÒ»¶Î£¬Äã»á·¢ÏÖËü½ö½öÊÇJavascript£¬ËüºÍÄã´î½¨ÍøÕ¾Ê±ÓõĴúÂëûÓÐÈκβ»Í¬¡£

µÚÒ»ÐдúÂëÀïµÄstyleMask±íʾ£¬ÄãʹÓÃËüÃÇÀ´ÉèÖô°¿ÚÑùʽ£¬Ã¿Ò»¸öÑùʽѡÏî´ú±íÕâËüËùÌí¼ÓµÄ£º±êÌâ¡¢¹Ø±Õ°´Å¥¡¢×îС»¯°´Å¥£¬ÕâЩѡÏîÊDz»±äµÄ¡£È»ºóʹÓá°|¡±½«ËüÃǸô¿ª¡£

Äã¿ÉÒÔÔÚÆ»¹û¹Ù·½ÎĵµÀï»ñÈ¡¸ü¶àµÄÑùʽѡÔñ¡£NSRsizebleWindowMaskÊÇÆäÖÐÒ»¸öÄã»áÓõ½µÄ¡£ÊÔÊÔ½«ËüÌí¼Óµ½style maskÀï¿´¿´»áËüÓÐʲôÓô¦¡£

¹Ø ÓÚÓï·¨ÓÐһЩ¶«Î÷ÊÇÄã±ØÐë¼ÇסµÄ¡£$.NSWindow.allocµ÷ÓÃNSWindowµÄalloc·½·¨£¬×¢ÒâÔÚallocµÄºóÃæÃ»ÓС°()¡±¡£ÔÚJSÀïÃæÕâÖÖ·½·¨ÊÇÓÃÀ´µ÷ÓÃÊôÐÔ¶ø²»ÊÇ·½·¨µÄ¡£ÔÚJS for OS XÀïÔ²À¨ºÅÖ»ÓÐÔÚÄãÏò·½·¨´«Èë²ÎÊý²ÅʹÓá£Èç¹ûûÓдø²ÎÊý£¬Äã»á»ñµÃÒ»¸öÔËÐÐʱ´íÎó¡£Èç¹ûÊÂÇéºÍÄãÔ¤ÆÚ²»Ò»Ö£¬×¢Òâ¼ì²éConsoleÀïµÄ´íÎó¡£

½ÓÏÂÀ´¾ÍÊdz¬¼¶³¤µÄ·½·¨ÃûÁË¡£

initWithContentRectStyleMaskBackingDefer

²é¿´NSWindowÎĵµÀï¹ØÓÚÕâ¸ö·½·¨µÄ²¿·ÖÄã»á·¢ÏÖËüÓÐЩ²»Í¬¡£

initWithContentRect:styleMask:backing:defer:

ÔÚObjective-CÀïÄãÐèÒªÓÃÏÂÃæµÄ´úÂëÀ´´´½¨Í¬ÑùµÄ´°¿Ú¡£

NSWindow*window[[NSWindowalloc]
initWithContentRect:NSMakeRect(0,0,windowWidth,windowHeight)
styleMask:styleMask,
backing:NSBackingStoreBuffered
defer:NO];

µ±Ä㽫Objective-C·½·¨×ª»»µ½JSÀïµÄʱºò£¬ÄãÐèҪȥµôðºÅ²¢½«ÆäºóµÄ×Öĸ¸Ä³É´óд¡£¶ø±»¡°[]¡±°üΧµÄÔò½Ð×öÀà»òÕß¶ÔÏóµÄ·½·¨¡£[NSWindow alloc]µ÷ÓÃNSWindowµÄalloc·½·¨¡£×ª»»µ½JSµÄʱºòÈ¥µô·½À¨ºÅ²¢ÇÒÓá°.¡±½«ËüÃÇÁ¬½ÓÆðÀ´¡£

ÎÒÈÏΪ´úÂëµÄÆäËû²¿·ÖÓ¦¸Ã¹»Ö±¹ÛµÄ£¬ÕâÀï¾Í²»Ï¸½²ÁË¡£ÒªÅªÇå³þÿһÐдúÂëµÄÒâÒ壬Äã¿ÉÒÔÈ¥¿´¹Ù·½Îĵµ¡£Ö»ÒªÄã³É¹¦ÏÔʾÁË´°¿Ú˵Ã÷ĿǰΪֹÄã×öµÄ»¹²»´í£¬ÈÃÎÒÃǸü½øÒ»²½¡£

Ìí¼Ó¿Ø¼þ

ÔÚ´°¿ÚÀïÎÒÃÇ»¹ÐèÒªÒ»¸ö±êÇ©¡¢Îı¾Óò£¬ÒÔ¼°Ò»¸ö°´Å¥¡£ÎÒÃǽ«Ê¹ÓÃNSTextFieldºÍNSButtonÀ´ÏÔʾËüÃÇ¡£½«ÄãµÄ´úÂë¸üгÉÏÂÃæÄÇÑù£¬È»ºóÔËÐгÌÐò¡£

ObjC.import("Cocoa");

varstyleMask=$.NSTitledWindowMask|$.NSClosableWindowMask|$.NSMiniaturizableWindowMask;
varwindowHeight=85;
varwindowWidth=600;
varctrlsHeight=80;
varminWidth=400;
varminHeight=340;
varwindow=$.NSWindow.alloc.initWithContentRectStyleMaskBackingDefer(
$.NSMakeRect(0,0,windowWidth,windowHeight),
styleMask,
$.NSBackingStoreBuffered,
false
);

vartextFieldLabel=$.NSTextField.alloc.initWithFrame($.NSMakeRect(25,(windowHeight-40),200,24));
textFieldLabel.stringValue="Image:(jpg,png,orgif)";
textFieldLabel.drawsBackground=false;
textFieldLabel.editable=false;
textFieldLabel.bezeled=false;
textFieldLabel.selectable=true;

vartextField=$.NSTextField.alloc.initWithFrame($.NSMakeRect(25,(windowHeight-60),205,24));
textField.editable=false;

varbtn=$.NSButton.alloc.initWithFrame($.NSMakeRect(230,(windowHeight-62),150,25));
btn.title="ChooseanImage...";
btn.bezelStyle=$.NSRoundedBezelStyle;
btn.buttonType=$.NSMomentaryLightButton;

window.contentView.addSubview(textFieldLabel);
window.contentView.addSubview(textField);
window.contentView.addSubview(btn);

window.center;
window.title="ChooseandDisplayImage";
window.makeKeyAndOrderFront(window);

Èç¹ûÒ»ÇÐÕýÈ·µÄ»°ÄãÏÖÔÚ»áµÃµ½ÓпؼþµÄ´°¿Ú¡£Äã²»ÄÜÔÚÎı¾ÓòÀïÊäÈ룬µã»÷°´Å¥Ò²²»»á·¢ÉúÈκÎÊÂÇé¡£²»¹ýÎÒÃǽÓÏÂÀ´»á½²µ½ÄÇÀï¡£

´øÓбêÇ©¡¢ÓòºÍ°´Å¥ÔªËصĴ°¿Ú

ÐÂÌí¼ÓµÄ´úÂëÀïÓÐÊ²Ã´ÄØ£¿textFieldLabelºÍtextFieldÀàËÆ£¬¶¼ÊÇNSTextFieldµÄʵÀý¡£ËüÃǵÄʹÓ÷½·¨ºÍ´´½¨´°¿ÚµÄ´úÂë²î²»¶à¡£initWithFrameºÍNSMakeRectÔòÊǽű¾´´½¨UIÔªËØµÄ·½·¨£¬ËüÃǵÄ×÷ÓÃÕýÈç×ÖÃæÒâ˼¡£

ÔÚ´´½¨Îı¾ÓòÖ®ºóÎÒÃÇ»¹ÐèÒª¸øËüÃÇÉèÖÃһЩÊôÐÔ¡£CocoaûÓкÍhtml±êÇ©ÔªËØÒ»ÑùµÄ¶«Î÷£¬µ«ÎÒÃÇ¿ÉÒÔͨ¹ýÉèÖÃÊôÐÔÀ´´ïµ½Í¬Ò»Ð§¹û¡£

ÎÒÃÇÐèÒªÈóÌÐò×Ô¶¯Ð´Èëµ½Îı¾Óò£¬ËùÒÔ½ûÖ¹ÁËÔÚÀïÃæÊäÈëÎÄ×Ö¡£Èç¹û²»ÐèÒªÕâô×ö£¬Äã¿ÉÒÔÓÃÒ»ÐдúÂëÀ´´´½¨Ò»¸ö±ê×¼µÄÎı¾Óò¡£

¶ÔÓÚ°´Å¥ÎÒÃÇÔòʹÓÃNSButton£¬ºÍÎı¾ÓòÒ»Ñù£¬´´½¨ËüÐèÒª»æÖÆÒ»¸ö³¤·½ÐΣ¬ÐèÒªµÄÊôÐÔÊÇbezelStyleºÍbuttonType£¬Á½¸öµÄÖµ¶¼Êdz£Á¿¡£ÕâÁ½¸öÊôÐÔ¿ØÖÆÈçºÎäÖȾ°´Å¥ÒÔ¼°ËüµÄÑùʽ¡£²é¿´NSButtonÎĵµÀ´¿´ÄãÄÜÓÃËü×öʲô¡£ÎÒͬÑù´´½¨ÁËÒ»¸öʾÀý³ÌÐòÀ´ÏÔʾ²»Í¬ÀàÐͺÍÑùʽµÄ°´Å¥¡£

´ú ÂëÀïÎÒÃÇ×öµÄ×îºóÒ»¼þʾÍÊÇ£¬Ê¹ÓÃaddSubview½«ÔªËØÌí¼Óµ½´°¿Ú¡£µ±ÎÒµÚÒ»´ÎÌí¼ÓµÄʱºòÎÒʹÓÃwindow.addSubview(theView)£¬Õâ¶ÔÓÚÆäËüʹÓÃNSView´´½¨µÄ±ê×¼viewÊÇÊÊÓõ쬵«²»ÊʺÏNSWindowµÄʵÀý¡£ÎÒ²»Ì«Çå³þΪʲô£¬µ«¶ÔÓÚ´°¿ÚÄãÐèÒªÌí¼Ó×ÓÊÓͼµ½contentView£¬ÎĵµÀïÃèÊöcontentView˵¡°´°¿ÚµÄÊÓͼ²ã¼¶Àï×î¸ß¿É·ÃÎÊÐÔµÄNSView¶ÔÏó¡±£¬²âÊÔ¿ÉÐС£

Èð´Å¥ÏìÓ¦µã»÷

µ±µã»÷°´Å¥µÄʱºò£¬ÎÒÏ£ÍûµÃµ½Ò»¸öÑ¡ÔñÎļþµÄÃæ°å¡£ÔÚÔÚ´Ë֮ǰ£¬ÈÃÎÒÃÇÏÈÈÈÏÂÉí£¬³¢ÊÔµ±µã»÷°´Å¥Ê±Êä³öÒ»ÌõÐÅÏ¢µ½ConsoleÀï¡£

ÔÚJavascriptÀïÄã¿ÉÒÔ°ó¶¨Ê¼þ¼àÌýÆ÷µ½ÔªËØÉÏÒÔ´¦Àíµã»÷¡£Objective-CûÓÐÀàËÆµÄ¸ÅÄî¡£ËüʹÓÃÏûÏ¢´«µÝµÄ·½·¨£¬Äã·¢ËͰüº¬·½·¨µÄÐÅÏ¢µ½Ò»¸ö¶ÔÏ󣬶ÔÏóÐèÒªÖªµÀ½ÓÊÕÐÅÏ¢ºóÈçºÎ´¦Àí¡£

ÎÒÃÇÐèÒª×öµÄµÚÒ»¼þÊÂÊǸø°´Å¥Ìí¼ÓtargetºÍaction¡£targetÊÇÎÒÃÇÏ뽫action·¢Ë͵½µÄ¶ÔÏóÃû³Æ¡£ÔÚ´úÂëµÄ°´Å¥ÉèÖÃÇøÓòÌí¼ÓÏÂÃæµÄÊôÐÔ£º

...
btn.target=appDelegate;
btn.action="btnClickHandler";
...

appDelegateºÍbtnClickHandlerÏÖÔÚ»¹²¢²»´æÔÚ£¬ÎÒÃÇÐèÒªÀ´´´½¨ËüÃÇ¡£ÏÂÃæµÄ´úÂëÐèҪ˳Ðò¡£ÎÒÔÚ´úÂëÀï±ê¼ÇÁËÓ¦¸ÃÔÚÄÄÀïÌí¼ÓдúÂë¡£

ObjC.import("Cocoa");

//Newstuff
ObjC.registerSubclass({
name:"AppDelegate",
methods:{
"btnClickHandler":{
types:["void",["id"]],
implementation:function(sender){
$.NSLog("Clicked!");
}
}
}
});

varappDelegate=$.AppDelegate.alloc.init;
//endofnewstuff

//Belowhereisinplacealready
vartextFieldLabel=$.NSTextField.alloc.initWithFrame($.NSMakeRect(25,(windowHeight-40),200,24));
textFieldLabel.stringValue="Image:(jpg,png,orgif)";
...

ÔËÐÐÓ¦Ó㬵ã»÷Choose Image°´Å¥£¬È»ºó¹Û²ìConsoleµÄÊä³ö¡£Èç¹û¿´µ½ÁË¡°Clicked!¡±£¬ËµÃ÷Ìí¼Ó³É¹¦ÁË¡£Èç¹û²»Êǵϰ£¬×Ðϸ¼ì²éÄãµÄ½Å±¾ÊÇ·ñºÍÉÏÃæÒ»Ñù£¬È»ºó¹Û²ìConsoleÀïÊä³öµÄ´íÎó¡£

Subclassing

Õâ¸öObjc.registerSubclassÊÇÊ²Ã´ÄØ£¿SubclassingÊÇ´´½¨¼Ì³ÐObjective-CÖÐÀàµÄ×ÓÀàµÄ·½·¨¡£×¢Ò⣺ÕâÀïµÄÊõÓïÊÇÎÒ×Ô´´µÄ£¬²»ÒªÔÚÒâÕâЩϸ½Ú¡£registerSubclass½ÓÊÕÒ»¸ö²ÎÊý£º°üº¬Ð¶ÔÏó³ÉÔ±µÄJS¶ÔÏó¡£ÕâЩ³ÉÔ±°üÀ¨£ºname£¬superclass£¬protocols£¬propertiesºÍmethods¡£

ÕâЩ¶¼ÊǺܺõ쬵«ÎÒÃÇÐèÒªÔõô×öÄØ£¿¼øÓÚÎÒÃÇûÓÐÌṩsuperclass£¬ÎÒÃǼ̳ÐÁËNSObject¡£ËüÊÇ´ó¶àÊýObjective-CÀàµÄ¸ùÀࡣȻºóÉèÖÃÒ»¸öÃû³ÆÒÔ±ã´ý»áÎÒÃÇÒýÓÃËü¡£

$.AppDelegate.alloc.init£º´´½¨Ò»¸öAppDeleteÀàµÄʵÀý¡£×¢ÒâÎÒÃÇûÓÐʹÓÃÔ²À¨ºÅ£¬ÒòΪÕâÀïËüÃDz»ÐèÒª½ÓÊܲÎÊý¡£

Subclass·½·¨

Äã¿ÉÒÔ¸ø·½·¨¶¨ÒåÈκοɽÓÊܵÄÃû³Æ¡£ÔÚÕâÀïÎÒÃÇÓÃbtnClickHandler¡£¸øËüÒ»¸ö´øÓÐtypesºÍimplementation³ÉÔ±µÄ¶ÔÏó¡£ÎÒûÓÐÔÚ¹Ù·½ÎĵµÀïÕÒµ½typesÊý×éÐèÒª°üº¬µÄÔªËØ£¬Í¨¹ý³¢ÊÔÎÒ·¢ÏÖËüÊÇÕâÑùµÄ£º

["returntype",["arg1type","arg2type",...]]

btnClickHandler²»»á·µ»ØÈκÎÖµ£¬ËùÒÔÎÒÃǽ«typeÉèΪvoid£¬Ëü½ÓÊÕÒ»¸ö²ÎÊý£¬·¢ËͶÔÏó¡£ÔÚÕâÀォÊDZ»ÃüÃûΪbtnµÄNSButton¡£ÎÒÃÇʹÓá°id¡±ÀàÐÍÀ´Ö¸´úÈκζÔÏó¡£

typeÈ«²¿µÄÀàÐÍÁбí¿ÉÒԲ鿴release notes¡£

implementationÊÇÒ»¸öÆÕͨµÄº¯Êý¡£ÔÚÀïÃæÄã¿ÉÒÔÖ±½ÓдJavascript¡£ºÍ$ bridgeÒ»Ñù£¬ÀàµÄÄÚ²¿´úÂë¶ÔÍⲿÓÐͬÑùµÄ¿É·ÃÎÊÐÔ£¬±ÈÈçÄãÔÚÀàÍⲿÉèÖõıäÁ¿¡£

ʹÓýӿÚ

ÄãÄÜÓÃsubclassÀ´ÊµÏÖÒÑÓеÄCocoa½Ó¿Ú£¬µ«ÕâÀïÓÐÒ»¸öÏÝÚå¡£ÎÒ·¢ÏÖÈç¹ûÄãʹÓÃprotocolsÊý×éÄãµÄ½Å±¾½«»áÍ£Ö¹ÏìÓ¦²¢ÇÒûÓдíÎóÈÕÖ¾¡£Èç¹ûÄãÏÝÈëÁËͬÑùµÄ×´¿ö£¬ÎÒдÁËÒ»¸öʾÀýºÍ½âÊÍÒÔ¹©²é¿´¡£

Ñ¡Ôñ²¢ÇÒÏÔʾͼƬ

ÏÖÔÚÎÒÃÇ×¼±¸ºÃ´ò¿ªÃæ°å£¬Ñ¡ÔñͼƬ£¬²¢ÇÒÔÚ´°¿ÚÏÔʾËüÁË¡£Ê¹ÓÃÏÂÃæµÄ´úÂëÌæ»»btnClickHandlerµÄimplementationº¯Êý£º

...implementation:function(sender){
varpanel=$.NSOpenPanel.openPanel;
panel.title="ChooseanImage";

varallowedTypes=["jpg","png","gif"];
//NOTE:WebridgetheJSarraytoanNSArrayhere.panel.allowedFileTypes=$(allowedTypes);

if(panel.runModal==$.NSOKButton){
//NOTE:panel.URLsisanNSArraynotaJSarrayvarimagePath=panel.URLs.objectAtIndex(0).path;
textField.stringValue=imagePath;

varimg=$.NSImage.alloc.initByReferencingFile(imagePath);
varimgView=$.NSImageView.alloc.initWithFrame(
$.NSMakeRect(0,windowHeight,img.size.width,img.size.height));

window.setFrameDisplay(
$.NSMakeRect(
0,0,
(img.size.width>minWidth)?img.size.width:minWidth,
((img.size.height>minHeight)?img.size.height:minHeight)+ctrlsHeight),
true
);

imgView.setImage(img);
window.contentView.addSubview(imgView);
window.center;
}}

ÎÒÃÇ×öµÄµÚÒ»¼þÊÂÊÇ´´½¨ÁËÒ»¸öNSOpenPanelµÄʾÀý£¬ÕâÀïµÄpanelÃæ°å¾ÍÊÇÑ¡ÔñÎļþºÍ±£´æÎļþʱ´ò¿ªµÄ´°¿Ú¡£

ÎÒÃÇÖ»ÏëÈóÌÐò´ò¿ªÍ¼Æ¬¡£ÉèÖÃallowedFileTypes¿ÉÒÔÈÃÎÒÃÇÏÞ¶¨ÎļþÀàÐÍ¡£ËüÐèÒª½ÓÊÜÒ»¸öNSArrayÊý×é¡£ÎÒÃÇ´´½¨ÁËÒ»¸ö°üº¬allowedTypesµÄJSÊý×飬µ«»¹ÐèÒª½«Ëüת»»µ½NSArray¡£Ê¹ÓÃ$(allowedTypes)¿ÉÒÔÍê³Éת»»¡£ÕâÊÇbridgeµÄÁíÒ»ÖÖÓ÷¨¡£Í¨¹ýÕâÖÖ·½·¨ÎÒÃÇ¿ÉÒÔ½«JS´«µ½Objective-CÀÈç¹ûÒª´«ËÍObjective-Cµ½JSÄã¿ÉÒÔÓÃ$(ObjcThing).js¡£

´ò¿ªÃæ°åʹÓõÄÊÇpanel.runModal¡£Õ⽫ÔÝÍ£´úÂëµÄÖ´ÐС£µ±Äãµã»÷Cancel»òOpen£¬Ãæ°å»á·µ»ØÒ»¸öÖµ¡£Èç¹ûµã»÷µÄÊÇOpen£¬½«»á·µ»Ø$.NSOKButtonµÄÖµ¡£

ÁíÒ»¸ö¹Ø¼üÊÇpanel.URLs¡£ÔÚJSÀÎÒÃǶÁÈ¡Êý×éµÄµÚÒ»¸öÖµµÄ·½·¨ÊÇarray[0]£¬ÒòΪURLsÊÇÒ»¸öNSArray£¬ËùÒÔ²»ÄÜʹÓ÷½À¨ºÅ£¬¶øÓÃobjectAtIndex·½·¨À´´úÌæ¡£ËüÃǵĽá¹ûÊÇÒ»ÑùµÄ¡£

µ±ÎÒÃÇ»ñÈ¡µ½Ò»¸öͼƬµÄURLµÄʱºòÎÒÃÇ¿ÉÒÔ´´½¨Ò»¸öеÄNSImage¶ÔÏó¡£ÓÉÓÚ´ÓÎļþURL»ñȡͼƬ·Ç³£ÆÕ±é£¬ËùÒÔΪ´ËÁ˶¨ÒåÁËÒ»¸ö·½±ãµÄ·½·¨£º

initByReferencingFile

ÎÒÃÇ´´½¨ÁËÒ»¸öNSImageView£¬Ê¹Óõķ½·¨ºÍ´´½¨ÆäËûUIÔªËØÒ»Ñù¡£imgView¸ºÔðÏÔʾͼƬ¡£

ÎÒÃÇ»¹ÏëÈô°¿ÚµÄ³ß´çÆ¥ÅäͼƬµÄ³ß´ç£¬Í¬Ê±ÎÒÃÇ»¹ÐèҪȷ¶¨Ò»¸ö×îСµÄ³ß´çÀ´ÏÔʾ¿Ø¼þ¡£ÎÒÃÇʹÓÃsetFrameDisplayÀ´¸Ä±ä´°¿ÚµÄ´óС¡£

È»ºóÎÒÃÇͨ¹ýÉèÖÃImage viewͼƬ²¢½«ÆäÌí¼Óµ½´°¿Ú£¬ÒòΪËüµÄ³ß´çÒѾ­±äÁËÎÒÃÇÐèÒªÖØÐ¶¨Î»´°¿Ú¡£

µ½ÕâÀï³ÌÐòÒѾ­Íê³ÉÁË¡£Äã¿ÉÒÔ´Ö±©µÄ²âÊÔËü£¬´ò¿ªÒ»¶ÑͼƬ£¬gif¶¯Í¼Ò²ÊÇÖ§³ÖµÄ£¬ËùÒÔ±ðÍüÁË´ò¿ªÒ»Ð©¡£

»¨Ðõ

ĿǰΪֹ£¬ÎÒÃÇÒ»Ö±´ÓScript EditorÀ´ÔËÐгÌÐò£¬µ«Ë«»÷´ò¿ª³ÌÐòÊÇͬÑùµÄÖ§³ÖµÄ¡£

Ë«»÷ͼ±êÒÔ´ò¿ª³ÌÐò

Äã¿ÉÒÔͨ¹ýÌæ»»/Contents/Resources/applet.icnsÀ´¸üгÌÐòͼ±ê£¬ÓÒ»÷³ÌÐòͼ±ê²¢Ñ¡Ôñ¡°Show Package Contents¡±À´²é¿´³ÌÐò×ÊÔ´¡£

ΪʲôÎҸе½¼¤¶¯

ÎҺܼ¤¶¯ÊÇÒòΪÎÒÈÏΪËüÓкܴóµÄDZÁ¦¡£ÕâÀïÊÇÎÒµÄһЩÏë·¨£ºÒ»µ©YosemiteÕýʽ·¢²¼£¬Èκΰ²×°ÁËÕâ¸öϵͳµÄÈ˶¼½«ÄÜʹÓÃ×îÁ÷ÐеijÌÐòÓïÑÔÀ´±àдԭÉúµÄ³ÌÐò¡£ËûÃDz»ÐèÒªÏÂÔØ»ò°²×°ÈÎºÎÆäËû¶«Î÷£¨±ÈÈçJ*vaµÄÔËÐÐʱ£©¾ÍÄÜÔËÐÐÕâЩ³ÌÐò¡£ÄãÉõÖÁûÓбØÒªÏÂÔØXcode¡£Õ⽫´ó´ó½µµÍ²ÎÓëµÄÃż÷£¬Î´À´½«ÊÇÄÑÒÔÖÃÐŵġ£

ÎÒÖªµÀÓëÔËÐÐÒ»¶Î½Å±¾Ïà±È£¬»¹ÓкܶàÖÖ´´½¨OS X³ÌÐòµÄ·½·¨¡£ÎÒÒ²²»»á»ÃÏëJavascript±àдµÄ³ÌÐò³ÉΪMacÉϵÄÊ×Ñ¡¡£µ«ÎÒÈÏΪÕ⽫ÔÊÐí³ÌÐòÔ±¿ª·¢Ò»Ð©ÈÃ×Ô¼ººÍÆäËûÈ˹¤×÷¸üÇáËɵÄС³ÌÐò¡£Èç¹ûÒ»¸öÍŶӳÉÔ±²»Ï°¹ßʹÓÃÃüÁîÐУ¬¿ÉÒÔ¿ìËÙΪËû´´½¨Ò»¸öGUI½çÃæ£»ÐèÒª¿ìËٵġ¢¿ÉÊÓ»¯µÄ·½·¨À´´´½¨²¢¸üо޴óµÄÅäÖÃÎļþ£¿À´Ð´Ò»¸öС³ÌÐò°É¡£

ÆäʵÆäËûµÄÓïÑÔÒ²ÓÐÕâÑùµÄÄÜÁ¦£¬PythonºÍRubyͬÑùÒ²ÄܶÁÈ¡ÏàͬµÄAPI£¬ÒÔ¼°±àдС³ÌÐò¡£µ«Äܹ»Ê¹ÓÃJavascriptÈÃÈ˸оõµ½ÊÂÇé²»Ò»ÑùÁË¡£ËüÊǵ߸²ÐԵģ¬Ëü¾ÍÏñÊdzäÂú´´ÔìÁ¦µÄWebÇÃÏìÁË×ÀÃæµÄ´óÃÅ¡£Æ»¹û³¨¿ªÁË´óÃÅ£¬ÎÞÐèÑûÇ룬ÎÒ½«×Ô¼º½øÈ¥¡£

   
3259 ´Îä¯ÀÀ       28
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢