Во-первых, лучший способ проверить буфер обмена - это создать простое приложение macOS :
let pasteboard = NSPasteboard.general
for element in pasteboard.pasteboardItems! {
for type in element.types {
print(type)
if let string = element.string(forType: type)?.prefix(30) {
print(string)
} else {
let data = element.data(forType: type)
print(data)
}
}
}
После запуска этого сценария вы заметите, что при копировании данных изСайты Google размещают контент в 3 форматах:
- Текст
public.html
com.apple.WebKit.custom-pasteboard-data
Перезапись содержимогоиз буфера обмена с подмножеством этих показывает, что хотя public.html
вставляет что-то в Сайты Google, форматирование все отключено.Таким образом, com.apple.WebKit.custom-pasteboard-data
- это то, о чем мы действительно заботимся.
Вы не можете конвертировать содержимое напрямую в строку, так как это приведет к сбою приложения или отображению тарабарщины в зависимости от выбранной кодировки.Если мы запишем содержимое его данных в файл на диске, мы можем проверить его содержимое с помощью Hex Fiend .Там вы поймете, почему это так:
Похоже, что текст начинается как простая кодировка Ascii и в конечном итоге кодируется в JSON как UTF-16.Интересно, что формат выглядит как application/x-vnd.google-sites-document
, но поиск Google для этого формата не дает никаких релевантных результатов.
Следующий шаг - вернуться на Сайты Google, скопировать что-нибудь со словом «Тест»."в буфер обмена, а затем используйте Hex Fiend для поиска est
(00 65 00 73 00 74
), затем попробуйте заменить e
на E
, а затем скопируйте его в буфер обмена:
let url = URL(fileURLWithPath: "readdata")
let data = try! Data(contentsOf: url)
let pasteboardType = NSPasteboard.PasteboardType(rawValue: "com.apple.WebKit.custom-pasteboard-data")
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
assert(pasteboard.setData(data, forType: pasteboardType))
assert(pasteboard.pasteboardItems![0].types.count == 1)
ПослеЗапустив этот код и вставив его на Сайты Google, он показал слово TEst
вместо Test
, доказав, что это возможно.
На этом мое исследование закончилось, потому что мне нужно было запустить скрипт через Google Apps.Скрипт работает в электронной таблице Google.Однако исторически было трудно скопировать текст в буфер обмена с помощью Javascript , не говоря уже о необходимости сделать это с помощью пользовательского формата (не только текста) и с помощью скрипта Google Apps (вместо использования HTML DOMи API буфера обмена ).
Если бы я продолжил идти по этому пути, я бы сделал следующее:
- В Сайтах Google создайте «шаблон» изто, что я хочу вставить с фиктивными значениями (например,
Title goes here
, Subtitle goes here
и т. д.). - Замените эти фиктивные значения действительными значениями.
Разверните его на одномиз этих платформ:
Поскольку в сценариях Google Apps нет простого в использовании API, стоимость обслуживания любого из этих решений может оказаться равнойслишком много, и просто надеюсь, что новый сайт Googles получает поддержку сценариев приложений .