在脚本中,我需要将面板中的丰富文本放入TextEdit中。这与在AppleScript中预期的一样工作:
tell application "TextEdit"
activate
set myrtf to the clipboard as «class RTF »
set mydoc to make new document
set text of mydoc to myrtf
end tell但是,我需要使用JXA,并且我不知道如何将上面的AppleScript转换为JXA。
一个(已解决的)问题是,在JXA中,您可以只使用JXA-Objective桥读取除纯文本以外的任何pasteboard内容。但从那以后我就被困住了。或者我以包含原始RTF属性化字符串("{\\rtf1\\ansi\\ansicpg1252\\cocoartf1671\\cocoasubrtf600\n{\\fonttbl…)的纯文本结束。或者我得到一个转换错误(-10000)。以下是我尝试过的:
var TextEdit = Application('TextEdit');
TextEdit.includeStandardAdditions = true;
TextEdit.activate();
ObjC.import('AppKit');
var content = $.NSPasteboard.generalPasteboard.stringForType('public.rtf');
var data = content.dataUsingEncoding('NSUTF8StringEncoding');
var string = $.NSAttributedString.alloc.initWithRTFDocumentAttributes(data, '0');
var mydoc = TextEdit.Document().make();
mydoc.text = content.js; // or data.js or string.js如果在最后一行中使用content.js,就会得到上面提到的原始RTF属性化字符串,如果我使用data.js或string.js,则会得到错误-10000。
必须能够将上面的简单AppleScript转换为JXA。我的错误在哪里?
发布于 2022-01-16 13:59:27
在AppleScript中工作的东西常常在JXA中中断。这是半生不熟的,有缺陷的,被遗弃的。所以没人用它。
在本例中,JXA内置的Apple 1.拙劣地描述了typeType和typeEnumerated描述符是如何连接到JS /从JS (它重载JS字符串而不是定义Symbol类型)的,2.提供了无法创建«class RTF »之类的苹果原始事件描述符的方法( typeType的描述符包含以四字符代码形式写入的OSType的4字节值,由chevrons包围)。
(您可以使用+[NSAppleEventDescriptor descriptorWithTypeCode:]构建描述符,但是JXA的AE桥不理解它的ObjC桥,反之亦然。)
如果可能的话,请使用AppleScript,请记住,OSA对RTF数据的支持始终是可怕的,甚至完全避免使用OSA,并使用Cocoa访问剪贴板和编写RTF文件,并使用ObjC/Swift编写代码。如果你想要进一步的建议,发布一个关于你想要做的事情的一般描述,而不是你想要做的。
https://stackoverflow.com/questions/70691437
复制相似问题