Создание плагина виджета
Одни только виджеты не могут получить доступ к приложениям непосредственно, получить распределенные уведомления или считать файлы из диска. Для включения этих взаимодействий необходимо обеспечить плагин. Вы обязаны реализовывать интерфейс для своего плагина, делающего себя доступным для виджета. Этот интерфейс связывается с Вашим приложением любым способом, является самым надлежащим, например, путем выдачи команд AppleScript.
Например, если бы Вы хотели вывести на экран изображение контакта Адресной книги в своем виджете, то Вы создали бы плагин, чтобы получить доступ к изображению, записать его во временный файл и установить файл как <img>
элемент src
значение. (Обратите внимание на то, что, если бы временный файл вне пакета виджета, необходимо было бы также указать AllowFileAccessOutsideOfWidget
ключ, как описано в Использовании Ключей доступа.) То, если Вы хотели использовать виджет в качестве другого способа обеспечить интерфейс для приложения, другой пример. Обеспечение фронтэнда виджета позволяет пользователю взаимодействовать с Вашим приложением незаметным и простым способом, который легкодоступен.
Плагин виджета является пакетом Какао. В XCode используйте шаблон «Cocoa Bundle» для создания пакета. В сменном коде реализуйте интерфейс плагина виджета.
Для примеров виджетов, использующих плагины, посмотрите Дни рождения и проекты примера кода Напоминаний.
Интерфейс плагина виджета
Любой плагин виджета должен реализовать этот метод, чтобы использоваться из Инструментальной панели:
- (id) initWithWebView:(WebView*)webview |
Когда Ваш плагин сначала загружается, инструментальная панель вызывает это. В этой точке инициализируйте объект своего основного класса и подготовьте любые структуры критических данных.
Для имения плагина взаимодействуют с виджетом, необходимо будет реализовать интерфейс WebScripting, как определено в Вызове Методов Objective C От JavaScript и WebScripting
. В дополнение к этому интерфейсу также необходимо реализовать этот метод:
- (void) windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject |
Если реализовано, Инструментальная панель вызывает его, прежде чем Ваш виджет будет загружен и позволит Вам добавлять, что JavaScript возражает, что Ваш виджет может использовать. Эти объекты устраняют разрыв между JavaScript и Objective C, и являются Вашим интерфейсом с Вашим виджетом. После того, как это сообщение получено, вызвать setValue: forKey:
на просто полученном WebScriptObject
связать его с Вашим собственным объектом и дать ему имя. Для функционирования должным образом, объект, который Вы связываете с WebScriptObject
должен реализовать интерфейс WebScripting.
Этот пример демонстрирует то, что должна включать Ваша реализация этого метода:
- (void) windowScriptObjectAvailable:(WebScriptObject *) windowScriptObject |
{ |
[windowScriptObject setValue:self forKey:@"MyWindowScriptObject"]; |
... |
} |
Любые методы, принадлежащие объекту, который Вы связываете с данным windowScriptObject
будет доступно Вашему виджету в JavaScript, через указанный ключ. Однако Ваши методы будут доступным использованием имени по умолчанию, создаваемого для него, который может сбить с толку в зависимости от его имени Objective C. Разработчикам советуют реализовать этот метод для обеспечения более человекочитаемого имени:
+ (NSString *)webScriptNameForSelector:(SEL)aSelector |
В следующем примере Ваш сменный класс связывается с полученным WebScriptObject
, именованный windowScriptObject
. Ключ для объекта MyWindowScriptObject
, означая, что, из виджета, любой метод, принадлежащий MyWindowScriptObject
класс можно вызвать на него:
<html> |
<head> |
... |
<script> |
... |
function someFunction() |
{ |
... |
if (MyWindowScriptObject) |
{ |
MyWindowScriptObject.someMethod(someArg); |
} |
... |
} |
... |
</script> |
</head> |
... |
</html> |
Например, когда виджет закончен, загрузившись в Инструментальной панели, можно использовать это для уведомления плагина. Можно установить функцию, которую вызовут, когда виджет закончил загружаться. Эта функция будет, в свою очередь, вызвать любой метод, который Вы предоставляете:
<html> |
... |
<body onload='MyWindowScriptObject.someMethod(someArg)'> |
... |
</body> |
</html> |
Пакет плагина виджета
Файл списка свойств информации о стандарте XCode предоставляет большую часть информации, Вы должны для плагина функционировать должным образом. Несмотря на это, необходимо обеспечить значение для NSPrincipalClass
свойство.
Как только Вы компилируете пакет, Вы готовы развернуть его. Для Вашего виджета для использования плагина поместите его на корневом уровне пакета виджета.
Для Вашего плагина, который будет загружен при активации виджета, он должен быть указан в виджете Info.plist
файл. Свойство Plugin
потребностями, которые будут добавлены, и его значение, должна быть Строка, заполненная именем Вашего пакета.
Дополнительные ресурсы.
Для получения дополнительной информации о плагинах Инструментальной панели посмотрите Ссылку Инструментальной панели в Документации Приложений Apple.
Для узнавания больше об образовании моста среды JavaScript виджета с пакетом Какао плагина виджета считайте Методы Objective C Вызова Из JavaScript.
При компиляции плагина виджета удостоверьтесь, что Вы создаете его как Универсальный плагин для использования на PowerPC и основанных на Intel компьютерах Macintosh. Для больше на Универсальных двоичных файлах, считайте Технические Вопросы и ответы QA1451: основанный на Intel Macs, Инструментальная панель, Safari, и Вы и Универсальные Двоичные Инструкции по Программированию, Второй Выпуск.