Apple脚本:如何将html内容复制到剪贴板?

K J*_*K J 8 html macos applescript rtf

我知道如何将纯文本复制到剪贴板:

oascript -e 'set the clipboard to "plain text"'
Run Code Online (Sandbox Code Playgroud)

但问题是如何将html内容复制到剪贴板?例如,如何将以下html内容复制到剪贴板:

<b>bold text</b>
Run Code Online (Sandbox Code Playgroud)

当我将它粘贴到TextEdit中时,我得到粗体文本?

我在这里先向您的帮助表示感谢!


我找到了一个中间解决方案:

echo "<b>bold text</b>" | textutil -stdin -stdout -format html -convert rtf | pbcopy
Run Code Online (Sandbox Code Playgroud)

到目前为止这很好,但不幸的是我发现它不适用于图像标记:

echo "<img src=\"https://www.google.com/images/srpr/logo3w.png\">" | textutil -stdin -stdout -format html -convert rtf | pbcopy
Run Code Online (Sandbox Code Playgroud)

这不能完成我想要的工作,所以有人知道原因吗?
谢谢!


我找到了一个有效的解决方案并将其发布在下面:)

K J*_*K J 17

我找到了一个解决方案,其想法是直接使用HTML类而不是RTF类.(TextEdit或Web编辑器可以处理此HTML类以及RTF类数据)
您所要做的就是将您的html代码转换为原始的十六进制代码.
完整的代码如下:

hex=`echo -n "your html code here" | hexdump -ve '1/1 "%.2x"'`
osascript -e "set the clipboard to «data HTML${hex}»"
Run Code Online (Sandbox Code Playgroud)

当然,你可以将它们组合成一个句子.
希望这有助于任何感兴趣的人.:)

  • 当我粘贴到例如 TextEdit 时,这可以工作,但我无法粘贴到很多其他地方,例如 Discord 的网络应用程序。有任何想法吗? (2认同)
  • @HappyFace 目标应用程序必须支持 HTML。然而,Discord 需要纯文本。由于剪贴板中可以有多种数据类型,我们可以通过向剪贴板添加纯文本表示形式来解决此问题,而不会丢失 HTML 版本:`将剪贴板设置为 {«class HTML»:«data HTML${hex}»,字符串:“${plain}”}`。我在使用 Slack 时遇到了这个问题,它实际上能够处理 HTML,但如果没有可用的纯文本,仍然拒绝这样做。详细信息:https://aaron.cc/copying-the-current-safari-tab-as-a-to-the-clipboard-as-a-clickable-link/ (2认同)

Jia*_*ang 5

如果输入的 HTML 太大,@kj 的解决方案将不起作用,您可能会遇到如下错误消息:

\n\n
/usr/bin/osascript: Argument list too long\n
Run Code Online (Sandbox Code Playgroud)\n\n

我对 @kj\ 的解决方案进行了一些改进,将其转换为可执行文件并通过管道处理数据。我希望它也有帮助。

\n\n

可执行文件

\n\n

〜/ bin / pbcopyhtml:

\n\n
/usr/bin/osascript: Argument list too long\n
Run Code Online (Sandbox Code Playgroud)\n\n

用法

\n\n

从管道

\n\n
$ printf \'# title\\n\\n- list\\n- list\' | cmark | ~/bin/pbcopyhtml\n$ osascript -e \'the clipboard as record\'\n\xc2\xabclass HTML\xc2\xbb:\xc2\xabdata HTML3C68313E7469746C653C2F68313E0A3C756C3E0A3C6C693E6C6973743C2F6C693E0A3C6C693E6C6973743C2F6C693E0A3C2F756C3E0A\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n\n

从文件

\n\n
$ printf \'# title\\n\\n- list\\n- list\' | cmark > sample.html\n$ ~/bin/pbcopyhtml sample.html\n$ osascript -e \'the clipboard as record\'\n\xc2\xabclass HTML\xc2\xbb:\xc2\xabdata HTML3C68313E7469746C653C2F68313E0A3C756C3E0A3C6C693E6C6973743C2F6C693E0A3C6C693E6C6973743C2F6C693E0A3C2F756C3E0A\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n