2017-01-27 25 views
3

私はJXAオブジェクトのすべてのメソッドをリストしようとしています。私は、ブラウザでJavaScriptと連携いくつかの方法を試してみたが、どれも働いていない: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'とJXA-にObjCブリッジ – Sancarn

+0

を使用して' NSScriptClassDescription'であなたが言及したそれらを使用するために迅速なコード例を与えていいですけれどもあなたは、オブジェクトの定義を検査することができるはずですか? – gnis

0
  1. アップルイベントオブジェクトモデル(「スクリプト可能なアプリケーション」インターフェイス)は、オブジェクト指向のDOMではなく抽象的な関係グラフです。それは "メソッド"を持っていません、それはRPC +単純なファーストクラスのリレーショナルクエリを持っています。

  2. 現在のアプリケーションでは、AEOMはイントロスペクトではありません。これは数多くの欠点のうちの1つであり、その多くは、非常に大規模で野心的な問題で迅速かつ汚れた最初のカットであることをすべて追跡することができます。これは直ちにAppleの経営陣によって直ちに停止されましたv1.1が出荷され、デザイナーが辞めるようになった。あなたができることは、スクリプトエディタで「ファイル」>「辞書を開く」を選択して、アプリの辞書を読むことです。それでもまだ十分に不十分ですが、あなたが得られる最高のものです(特にAppleが今後数年で全面的に落ち着くようになってきた今は)。

  3. JXAはバッグo'ballsです。ただ言って。

+0

だから、JXAを学ぶのを邪魔しないと言っているのですか?私は、Finderへの簡単なスクリプトインターフェイスが、フォルダを与えられたようなもの、すべてのサブフォルダを見つけること、サブフォルダ内の特定のファイルを取得して別のフォルダにコピーすることを望んでいました。これまでのところ、非常に単純な作業でなければならないことについては、馬鹿げて複雑で複雑なように見えます。 – RobG

+0

@RobG JXAは依然として非常に強力ですが、Swift/ObjCのようなスクリプトでは「スクリプト」と同じように強力ではありません。スクリプトとも言えるのであれば...あなたはオブジェクトの定義を調べることができます。 JXA-ObjC-Bridgeを使った 'NSScriptSuiteRegistry'と' NSScriptClassDescription' – Sancarn

関連する問題