2017-01-27 4 views
3

JXA 객체의 모든 메소드를 나열하려고합니다. 나는 브라우저에서 자바 스크립트 작업을 여러 가지 방법을 시도했지만 아무도 일하지 않은 : 이 JXA 객체의 모든 메소드를 어떻게 찾을 수 있습니까?

>> Object.getOwnPropertyNames(Application('Finder').selection()[0]); 
=> ["__private__"] 
>> 
>> JSON.stringify(Application('Finder').selection()[0]) 
=> undefined 
>> 
>> console.dir(Application('Finder').selection()[0]) 
!! Error on line 1: TypeError: console.dir is not a function. (In 'console.dir(Application('Finder').selection()[0])', 'console.dir' is undefined) 
>> 
>> for(var m in Application('Finder').selection()[0]) { console.log(m); } 
=> undefined 
>> 
>> console.log(Application('Finder').selection()[0]) 
2017-01-27 16:51:16.331 osascript[18617:633276] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFStringappendString:]: nil argument' 
*** First throw call stack: 
(
     0 CoreFoundation      0x00007fff77feb0db __exceptionPreprocess + 171 
     1 libobjc.A.dylib      0x00007fff8cc7da2a objc_exception_throw + 48 
     2 CoreFoundation      0x00007fff780689c5 +[NSException raise:format:] + 197 
####### SNIPPED FOR BREVITY ######## 
     45 Foundation       0x00007fff799944ea -[NSRunLoop(NSRunLoop) run] + 76 
     46 osascript       0x000000010d4e0485 osascript + 9349 
     47 libdyld.dylib      0x00007fff8d55f255 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
/Users/example/Tools/my-tools/osascript: line 24: 18617 Abort trap: 6   reattach-to-user-namespace /usr/bin/osascript "[email protected]" 

가 어떻게 JXA 객체가 가지고있는 모든 방법의 목록을 얻을 수 있습니다

?

답변

4

당신은 개체의 properties() 방법을 사용하여 (대응 방법이) 객체의 속성의리스트를 얻을 수 값을 검색

>> Application('Finder').selection()[0].properties() 
=> { 
"class":"documentFile", 
"name":"gist.sh", 
"index":12, 
"displayedName":"gist.sh", 
"nameExtension":"sh", 
"extensionHidden":false, 
"container":Application("Finder").startupDisk.folders.byName("Users").folders.byName("example").folders.byName("Tools").folders.byName("my-tools"), 
"disk":Application("Finder").startupDisk, 
"position":{ 
    "x":-1, 
    "y":-1 
}, 
"desktopPosition":null, 
"bounds":{ 
    "x":-33, 
    "y":-33, 
    "width":64, 
    "height":64 
}, 
"kind":"shell script", 
"labelIndex":0, 
"locked":false, 
"description":null, 
"comment":"", 
"size":804, 
"physicalSize":4096, 
"creationDate":Thu Jan 19 2017 13:47:43 GMT-0500 (EST), 
"modificationDate":Thu Jan 19 2017 13:47:43 GMT-0500 (EST), 
"icon":null, 
"url":"file:///Users/example/Tools/my-tools/gist.sh", 
"owner":"example", 
"group":"(unknown)", 
"ownerPrivileges":"read write", 
"groupPrivileges":"read only", 
"everyonesPrivileges":"read only", 
"fileType":null, 
"creatorType":null, 
"stationery":false, 
"productVersion":"", 
"version":"" 
} 

이들 중 임의

이 방법으로 호출 될 수 :

>> Application('Finder').selection()[0].owner() 
=> "example" 
>> Application('Finder').selection()[0].displayedName() 
=> "gist.sh" 

이 목록에는 모든 방법이 포함되어 있지 않습니다. 또한 properties() 메서드는 모든 개체에서 호출 할 수 없습니다.

+1

당신은'NSScriptSuiteRegistry'와'NSScriptClassDescription'가 JXA-ObjC 브리지 – Sancarn

+0

를 사용하여 당신은 당신이 언급 한 사람들을 사용하는 빠른 코드 예제를 제공 될까요과 함께하지만 개체의 정의를 검사 할 수 있어야한다? – gnis

0
  1. Apple Event Object Model ("스크립트 가능한 앱"인터페이스)은 OO DOM이 아닌 추상 관계 그래프입니다. 그것은 "메소드"를 가지고 있지 않으며 RPC + 간단한 일류 관계형 쿼리를 가지고 있습니다.

  2. 현재 응용 프로그램에서는 AEOM을 검사 할 수 없습니다. 이것은 수많은 단점 중 하나이며, 그 중 상당수는 매우 크고 야심적인 문제에 대한 신속하고 지저분한 첫 번째 인하로 추적 될 수 있습니다. Apple의 경영진은 즉시 팀을 해산시키는 바보 같은 결과를당했습니다. v1.1이 출하되면서 디자이너들은 그만두 게되었다. 가장 좋은 방법은 스크립트 편집기에서 파일> 사전 열기를 선택하여 앱의 사전을 읽는 것입니다. 여전히 총체적으로 부적절하지만, 당신이 얻는 최고가 될 것입니다 (특히 애플이 앞으로 몇 년 안에 모든 것을 끝내 버릴 것으로 보입니다).

  3. JXA는 가방 o'balls입니다. 그냥 말해.

+0

그렇다면 JXA를 배워야한다고 말하는 것입니까? 필자는 Finder에 대한 간단한 스크립팅 인터페이스가 주어진 폴더와 같은 작업, 모든 하위 폴더 찾기, 하위 폴더의 특정 파일 가져 오기 및 다른 폴더로 복사 작업을 수행하기를 바랬습니다. 지금까지는 매우 단순한 일이 무엇인지에 대해 엄청나게 복잡하고 복잡해 보입니다. – RobG

+0

@RobG JXA는 여전히 Swift/ObjC와 같은 스크립트에서 '스크립팅'만큼 강력한 것은 아니지만 스크립팅이라고 할 수 있다면 매우 강력합니다. 객체의 정의를 검사 할 수 있어야합니다. JXA-ObjC-Bridge를 사용하는'NSScriptSuiteRegistry'와'NSScriptClassDescription' – Sancarn