listener
для события eventType
:Добавляет функцию-обработчик, которая будет вызвана при возникновении событий «ready» или «error».
listener
сразу для нескольких событий eventType
:«ZeroClipboard.on({«ready»: function(e) { /…/ },«error»: function(e) {/…/}});»
Позволяет добавить несколько функций-обработчиков для событий «ready» и «error», которые будут вызваны при их возникновении.
eventType
и функциями/объектами listener
:— «ZeroClipboard.off(«ready», listenerFn);»
— «ZeroClipboard.off(«error», listenerObj);»
Удаляет функцию-обработчик listenerFn для события «ready», а также удаляет объект-обработчик listenerObj для события «error».
listener
для нескольких событий eventType
:«ZeroClipboard.off({«ready»: readyListenerFn,«error»: errorListenerFn});»
Удаляет функции-обработчики readyListenerFn и errorListenerFn для событий «ready» и «error» соответственно.
listener
для одного события eventType
:«ZeroClipboard.off();»
Полностью удаляет все функции-обработчики для всех событий.
listener
для ВСЕХ зарегистрированных типов событий:«ZeroClipboard.off()»
Полностью удаляет ВСЕ функции-обработчики для ВСЕХ событий.
«ZeroClipboard.emit(«ready»);»
Вызывает событие «ready» у всех зарегистрированных слушателей.
listener
для данного типа события:«var listeners = ZeroClipboard.handlers(«ready»)».
Возвращает массив с зарегистрированными функциями-обработчиками для события «ready».
listener
для всех типов событий:«var listeners = ZeroClipboard.handlers();».
Возвращает объект со всеми зарегистрированными функциями-обработчиками для всех событий.
Событие «ready»:
Возникает, когда SWF-файл готов к действию после загрузки. Перед вызовом «ZeroClipboard.create()» необходимо установить большинство параметров конфигурации с помощью «ZeroClipboard.config()».
Пример использования:
«ZeroClipboard.on(«ready», function(e){/e = {type: «ready», message: «Flash communication is established», target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, version: «11.2.202», timeStamp: Date.now()}/})».
Событие «beforecopy»:
Происходит при клике на элемент. Используется для подготовки перед событием «copy». Обработчики этого события должны работать синхронно, если они хотят завершиться до запуска события «copy».
Пример использования:
«ZeroClipboard.on(«beforecopy», function(e){/ e = { type: «beforecopy», target: currentlyActivatedElementOrNull, relatedTarget: dataClipboardElementTargetOfCurrentlyActivatedElementOrNull, currentTarget: flashSwfObjectRef, timeStamp: Date.now() }/})».
Событие «copy»:
Происходит после события «beforecopy», когда пользователь нажимает на кнопку. Если HTML-элемент имеет атрибут «data-clipboard-text» или «data-clipboard-target», то ZeroClipboard получит начальный набор данных. Затем будут вызваны обработчики события «copy», в которых можно вызвать метод event.clipboardData.setData для установки текста.
Обработчики события «copy» должны работать синхронно, чтобы сохранить временно повышенные разрешения, предоставленные пользователем. ZeroClipboard.on("error", function(e))
{ type: "error", name: "flash-sandboxed", messsage: "Попытка запустить Flash в изолированном iframe, что невозможно", target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), minimumVersion: "11.0.0", version: "11.2.202" }
Этот тип события error срабатывает, когда установленная в браузере версия Flash Player не может двунаправленно взаимодействовать с JavaScript.
ZeroClipboard.on("error", function(e)) { /* e = { type: "error", name: "flash-unavailable", messsage: "Flash не может двунаправлено взаимодействовать с JavaScript", target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), minimumVersion: "11.0.0", version: "11.2.202" }; }**
ZeroClipboard.on("error", function(e)) { /* e = { type: "error", name: "flash-degraded", message: "Flash не может сохранить точность данных при взаимодействии с JavaScript", target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), minimumVersion: "11.0.0", version: "11.2.202" };**
Этот тип события error срабатывает, когда установленная в браузере версия Flash Player не может взаимодействовать с JavaScript без потери точности данных.
ZeroClipboard.on("error", function(e)) { /* e = { type: "error", name: "flash-deactivated", message: "Версия Flash слишком старая для браузера или объекты Flash настроены как «клик для активации», и пользователь не авторизует их в течение globalConfig.flashLoadTimeout миллисекунд или не авторизует вообще.**
Этот тип события error может также срабатывать в некоторых браузерах, если объект ZeroClipboard SWF не удаётся загрузить вообще. Подробнее см. error\[name = "swf-not-found"\]
для получения дополнительной информации.
ZeroClipboard.on("error", function(e)) { /* e = { type: "error", name: "flash-overdue", message: «SWF успешно загружается, но на это уходит больше времени, чем globalConfig.flashLoadTimeout миллисекунд. Это может быть вызвано одной из следующих ситуаций:**
Соответствующая реакция на это событие остаётся на усмотрение потребителя. Например, если они решили вызвать ZeroClipboard.destroy()
в ответ на более раннее событие error[name = «flash-deactivated»]
, а затем получают это событие error[name = «flash-overdue»]
, они могут выбрать «перезапуск» своего процесса и создание новых экземпляров клиента ZeroClipboard, или они могут просто зарегистрировать ошибку на своём сервере, чтобы рассмотреть возможность увеличения разрешённого времени ожидания в будущем.
Это может быть особенно важно для приложений на основе SPA или PJAX, поскольку их пользователи могут оставаться на одной странице в течение длительного периода времени, в течение которого они, возможно, могли бы получить улучшенный опыт, если бы ZeroClipboard был «перезапущен» после первоначального сбоя. Ошибка «flash-overdue»
Тип: «error», name: «flash-overdue», message: «Flash communication was established, но НЕ в пределах допустимого времени».
Целевой объект: null.
Связанный целевой объект: null.
Текущий целевой объект: flashSwfObjectRef.
Отметка времени: Date.now().
Минимальная версия: «11.0.0».
Версия: «11.2.202».
«error[name = "version-mismatch"]»
Добавлен в v2.2.0.
Этот тип события ошибки срабатывает, когда значение свойства ZeroClipboard.version на стороне JavaScript не совпадает со значением свойства ZeroClipboard.VERSION, которое было скомпилировано в SWF. Хотя это строже, чем обычно необходимо, это помогает избежать странных проблем, если вы случайно забудете скопировать все ресурсы при обновлении установки ZeroClipboard или столкнётесь с какими-либо странными проблемами кэширования впоследствии. В таких ситуациях это событие ошибки должно сэкономить вам много времени и избавить от путаницы при случайном изменении двунаправленного API, которое не будет работать, если оба ресурса (JS и SWF) не будут обновлены соответствующим образом.
e = {type: «error», name: «version-mismatch», messsage: «Значение номера версии ZeroClipboard JS не соответствует значению номера версии ZeroClipboard SWF», target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), jsVersion: «2.2.1», swfVersion: «2.2.0».
«error[name = "clipboard-error"]»
Добавлен в v2.2.0.
Этот тип события ошибки возникает, когда возникает какая-либо ошибка при попытке Flash-слоя внедрить ожидающие данные буфера обмена в буфер обмена. Это событие срабатывает только в том случае, если внедрение хотя бы одного формата данных в буфер обмена вызвало ошибку, но не обязательно означает, что внедрение не удалось для каждого формата данных.
Если оно вообще срабатывает, то происходит после события aftercopy и перед всплывающим событием click.
e = {type: «error», name: «clipboard-error», messsage: «По крайней мере одна ошибка возникла при попытке ZeroClipboard внедрить ваши данные в буфер обмена», target: currentlyActivatedElementOrNull, relatedTarget: dataClipboardElementTargetOfCurrentlyActivatedElementOrNull, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), data: {«text/plain»: «Blah», «text/html»: «Blah», «application/rtf»: «{\rtf1\ansi\n{\b Blah}}»}, errors: [{name: «SecurityError», message: «Ошибка безопасности буфера обмена OMG», errorID: 7320, stack: null, format: «application/rtf», clipboard: «desktop»}].
«error[name = "config-mismatch"]»
Добавлен в v2.2.0.
Этот тип события ошибки возникает, когда определённые свойства в настроенных значениях ZeroClipboard.config не соответствуют реальным значениям во Flash. Например, если указанное свойство config swfObjectId не соответствует неявно известному идентификатору элемента SWF-объекта SWF. Это должно происходить крайне редко, если только целостность URL swfPath не нарушается попытками межсайтовых сценариев (XSS).
e = {type: «error», name: «config-mismatch», messsage: «Конфигурация ZeroClipboard не соответствует реальности Flash», target: null, relatedTarget: null, currentTarget: flashSwfObjectRef, timeStamp: Date.now(), property: «swfObjectId», configuredValue: «my-zeroclipboard-object», actualValue: «global-zeroclipboard-flash-bridge»}.
«error[name = "swf-not-found"]»
Добавлен в v2.2.0.
Этот тип события ошибки возникает, когда объект ZeroClipboard SWF не может быть загружен, что обычно означает одно из следующего:
К сожалению, это событие может поддерживаться только ограниченным подмножеством браузеров на данный момент: Firefox и IE10 (конкретно). ## Экземпляр
Доступ к следующим свойствам и методам можно получить через экземпляр клиента ZeroClipboard, например:
var clippedEl = document.getElementById("d_clip_button");
var client = new ZeroClipboard(clippedEl);
client.id
[String
] Уникальный идентификатор для этого экземпляра клиента ZeroClipboard.
client.destroy()
[undefined
] Удалить все обработчики событий и открепить все закреплённые элементы.
client.setText(...)
client.setText("Blah");
[this
] Установить ожидающие данные типа "text/plain"
для вставки в буфер обмена.
client.setHtml(...)
client.setHtml("<b>Blah</b>");
[this
] Установить ожидающие данные типа "text/html"
для вставки в буфер обмена.
client.setRichText(...)
client.setRichText("{\\rtf1\\ansi\n{\\b Blah}}");
[this
] Установить ожидающие данные типа "application/rtf"
для вставки в буфер обмена.
client.setData(...)
client.setData("text/plain", "Blah");
[this
] Установить ожидающие данные указанного типа для вставки в буфер обмена.
client.setData({
"text/plain": "Blah",
"text/html": "<b>Blah</b>"
});
[this
] Установить ожидающие данные различных типов для вставки в буфер обмена. Эта конкретная сигнатура функции (передача объекта) неявно очистит все существующие ожидающие данные.
client.clearData(...)
client.clearData("text/plain");
[this
] Очистить ожидающие данные указанного типа для вставки в буфер обмена.
client.clearData();
[this
] Очистить все ожидающие данные для вставки в буфер обмена.
client.getData(...)
Добавлено в v2.1.0
.
var text = client.getData("text/plain");
[String
] Получить ожидающие данные указанного типа для вставки в буфер обмена.
var dataObj = client.getData();
[Object
] Получить копию ожидающих данных всех типов для вставки в буфер обмена.
client.clip(...)
client.clip(document.getElementById("d_clip_button"))
client.clip(document.querySelectorAll(".clip_button"));
client.clip(jQuery(".clip_button"));
[this
] Зарегистрировать действия буфера обмена для нового элемента (элементов) в клиенте. Это включает автоматическое инициирование ZeroClipboard.focus
на текущем элементе при наведении на него, если только свойство конфигурации autoActivate
не установлено в значение false
.
client.unclip(...)
client.unclip(document.getElementById("d_clip_button"))
client.unclip(document.querySelectorAll(".clip_button"));
client.unclip(jQuery(".clip_button"));
client.unclip();
[this
] Отменить регистрацию действий буфера обмена ранее зарегистрированных элементов на странице. Если элементы не указаны, ВСЕ закреплённые/зарегистрированные элементы будут отменены.
client.elements()
var els = client.elements();
[Array
] Получить все элементы, к которым привязан этот клиент.
client.on(...)
var listenerFn = function(e) { var client = this; /* ... */ };
client.on("ready", listenerFn);
var listenerObj = {
handleEvent: function(e) { var listenerObj = this; /* ... */ }
};
client.on("error", listenerObj);
[this
] Добавить функцию/объект listener
для eventType
в этом экземпляре клиента.
client.on("ready error", function(e) { /* ... */ });
[this
] Добавить функцию/объект listener
для нескольких eventType
s в этом экземпляре клиента.
client.on({
"ready": function(e) { /* ... */ },
"error": function(e) { /* ... */ }
});
[this
] Добавить набор сопоставлений eventType
с функциями/объектами listener
в этом экземпляре клиента. Клиент.off («ошибка», listenerObj);
[this] — удалить функцию/объект слушателя для eventType в данном экземпляре клиента.
client.off("ready error", listenerFn);
[this] — удалить функцию/объект слушателя для нескольких eventType в данном экземпляре клиента.
client.off({ "ready": readyListenerFn, "error": errorListenerFn });
[this] — удалить набор сопоставлений от eventType к функции/объекту слушателя в данном экземпляре клиента.
client.off("ready");
[this] — удалить все функции/объекты слушателей для eventType в данном экземпляре клиента.
client.off();
[this] — удалить все функции/объекты слушателей для всех зарегистрированных типов событий в данном экземпляре клиента.
client.emit("ready");
client.emit({
type: "error",
name: "flash-disabled"
});
[undefined] — отправить событие всем зарегистрированным слушателям в данном экземпляре клиента.
var listeners = client.handlers("ready");
[Array] — получает копию зарегистрированных функций/объектов слушателей для данного eventType в этом экземпляре клиента.
var listeners = client.handlers();
[Object] — получает копию карты зарегистрированных функций/объектов слушателей для ВСЕХ типов событий в этом экземпляре клиента.
См. список «Статические события». Экземпляры клиента ZeroClipboard воспроизводят ВСЕ события ZeroClipboard.Core, но ТОЛЬКО если событие не является неуместным для этого конкретного клиента. Единственное отличие состоит в том, что отправка событий клиентами будет обновлять объект события, чтобы включить свойство клиента, которое ссылается на соответствующий экземпляр клиента, например:
var client = new ZeroClipboard();
client.on("ready", function(e) {
if (e.client === client && client === this) {
console.log("Этот экземпляр клиента готов!");
}
});
Это значения по умолчанию для параметров конфигурации глобального уровня. Как правило, вы должны обновить их ПЕРЕД созданием клиентов.
var _globalConfig = {
// SWF URL, относительно страницы. Значением по умолчанию будет "ZeroClipboard.swf"
// в том же пути, что и файл JS ZeroClipboard.
swfPath: _swfPath,
// Политика сценариев SWF: домены страниц, которым SWF должен доверять.
// (одна строка или массив строк)
trustedDomains: window.location.host ? [window.location.host] : [],
// Включает параметр запроса "noCache" в запросах для SWF.
cacheBust: true,
// Включить использование причудливого «настольного» буфера обмена, даже в Linux, где он, как известно, работает плохо.
forceEnhancedClipboard: false,
// Сколько миллисекунд ждать загрузки SWF и ответа, прежде чем предположить, что
// Flash деактивирован (например, активация по клику) в браузере пользователя. Если вам всё равно,
// сколько времени требуется для загрузки SWF, вы можете установить значение `null`.
flashLoadTimeout: 30000,
// Установка значения `false` позволит пользователям обрабатывать вызов `ZeroClipboard.focus(...);`
// самостоятельно вместо того, чтобы полагаться на наш обработчик `mouseover` для каждого элемента.
autoActivate: true,
// Пузырь синтетических событий в JavaScript после их получения объектом Flash.
bubbleEvents: true,
// Обеспечение соответствия ОС окончаниям строк, т. е. "\r\n" в Windows, "\n" в других местах
fixLineEndings: true,
// Устанавливает идентификатор `div`, инкапсулирующего объект Flash.
// Значение проверяется на соответствие спецификации HTML4 для токенов ID.
containerId: "global-zeroclipboard-html-bridge",
// Устанавливает класс `div`, инкапсулирующего объект Flash.
containerClass: "global-zeroclipboard-container",
// Устанавливает идентификатор и имя элемента `object` Flash.
// Значение проверяется на соответствие спецификации HTML4 для токенов `ID` и `Name`.
swfObjectId: "global-zeroclipboard-flash-bridge",
// Класс, используемый для указания того, что зачёркнутый элемент находится над ним.
hoverClass: "zeroclipboard-is-hover",
// Класс, используемый для обозначения того, что зачёркнутым элементом активно пользуются (его щёлкают). **Активный класс: «zeroclipboard-is-active»**
// Принудительно устанавливаем курсор в виде руки («указатель») для всех обрезанных элементов.
// ВАЖНО: Это значение конфигурации МОЖНО изменить, пока SWF активно внедрен.
forceHandCursor: false,
// Устанавливает заголовок div, инкапсулирующего объект Flash.
// ВАЖНО: Это значение конфигурации МОЖНО изменить, пока SWF активно внедрён.
title: null,
// z-индекс, используемый объектом Flash.
// Максимальное значение (32-битное): 2147483647.
// ВАЖНО: Это значение конфигурации МОЖНО изменить, пока SWF активно внедрён.
zIndex: 999999999
};
Вы можете переопределить значения по умолчанию, выполнив вызовы типа `ZeroClipboard.config({ swfPath: "new/path" });` перед созданием каких-либо клиентов.
### Доступ к скриптам SWF
#### Входящий доступ к скриптам SWF: опция trustedDomains
Это позволяет другим файлам SWF и HTML-страницам из разрешённых доменов получать доступ / вызывать общедоступный код ActionScript, например функции, совместно используемые через `ExternalInterface.addCallback`. Другими словами, он контролирует входящий доступ к сценариям SWF.
Если ваш SWF-файл ZeroClipboard обслуживается из другого источника / домена, отличного от вашей страницы, вам необходимо сообщить SWF, что можно доверять вашей странице. Значение по умолчанию `[window.location.host]` почти всегда является тем, что вы захотите, если только вы специально не хотите, чтобы SWF взаимодействовал со страницами из других доменов (например, в `iframe` или дочерних окнах).
Для получения дополнительной информации о доверенных доменах обратитесь к официальной документации Flash для `flash.system.Security.allowDomain(...)`.
#### Исходящий доступ к скриптам SWF
Параметр `allowScriptAccess` (для разметки встраивания Flash) позволяет файлу SWF получать доступ / вызывать функции JavaScript / HTML HTML-страниц на разрешённых доменах, например вызывая функции через `ExternalInterface.call`. Другими словами, это контролирует исходящий доступ к сценариям SWF.
Начиная с версии v2.0.0, параметр конфигурации `allowScriptAccess` больше не существует. Подходящее значение будет определено непосредственно перед внедрением объекта Flash на страницу. Значение основано на взаимосвязи между текущим доменом (`window.location.host`) и значением параметра конфигурации `trustedDomains`.
Для получения дополнительной информации об `allowScriptAccess` обратитесь к официальной документации Flash.
## Ограничения безопасности
### Ограничения `sandbox`ed `iframe`
Атрибут `sandbox` элемента `iframe` (новый в HTML5, поддерживается в IE10+ и всех других современных браузерах) предоставляет веб-разработчикам способ указать браузеру загрузить содержимое определённого фрейма в среде с низкими привилегиями, начиная с наименьших возможных привилегий и затем добавляя необходимые возможности. Однако атрибут `sandbox` лишает фреймовое содержимое некоторых привилегий, которые **НЕЛЬЗЯ** вернуть обратно, включая возможность запуска собственных плагинов (например, Flash), что делает ZeroClipboard полностью непригодным для использования. См. ../instructions.md#sandboxed-iframe-limitations для подробного объяснения этого ограничения и обходных путей.
### Межпротокольные ограничения
ZeroClipboard был намеренно настроен так, чтобы не позволять SWF обслуживаться из безопасного домена (HTTPS), но использовать сценарии из небезопасного домена (HTTP). Если вы оказались в такой ситуации (как в Issue #170), см. ../instructions.md#cross-protocol-limitations для подробного объяснения этого ограничения и дальнейших действий.
### Ограничения протокола `file://`
Если вы хотите либо использовать ZeroClipboard на странице, размещённой через протокол `file://`, либо обслуживать ресурсы ZeroClipboard через протокол `file://`, вы почти наверняка столкнётесь с некоторыми препятствиями из-за ограничений безопасности Flash Player. Подробные сведения об этом ограничении и возможных способах его обойти см. в разделе «Ограничения файлового протокола» документа ../instructions.md.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )