~~NOTOC~~
Страница 4 из 4 **[[..examples|<]]** | >
--------------
====== Контролируйте страницы с помощью UserJS ======
===== Доступные методы и события =====
* [[.specs#window.opera.definemagicvariable|window.opera.defineMagicVariable]]
* [[.specs#window.opera.definemagicfunction|window.opera.defineMagicFunction]]
* [[.specs#window.opera.addeventlistener|window.opera.addEventListener]]
* [[.specs#window.opera.removeeventlistener|window.opera.removeEventListener]]
* [[.specs#window.opera.pushxsltransform|window.opera.pushXSLTransform]]
* [[.specs#window.opera.popxsltransform|window.opera.popXSLTransform]]
* [[.specs#window.opera.setoverridehistorynavigationmode|window.opera.setOverrideHistoryNavigationMode]]
* [[.specs#window.opera.getoverridehistorynavigationmode|window.opera.getOverrideHistoryNavigationMode]]
==== window.opera.defineMagicVariable ====
Этот метод может использоваться UserJS для отмены глобальных переменных, определенных постоянными скриптами. Он имеет три параметра:
== Name ==
Строка приводит имя переменной, которая должна быть отменена.
== Getter ==
Функция, которая должна выполняться каждый раз, когда скрипт пытается обратиться к содержимому переменной. Любое значение, возвращенное функцией, используется как значение переменной. Функцию будут передавать единственный параметр; текущее значение переменной.
== Setter ==
Дополнительный; Функция, которая должна выполняться каждый раз, когда скрипт пытается установить значение переменной. Функцию будут передавать единственный параметр; значение, которое скрипт может записать в переменную. Если функция не определена, то вместо этого используется значение ''null''.
Пример:
window.opera.defineMagicVariable(
'isGoodBrowser',
function (curVal) { return true; },
function (newVal) { if(!newVal) { window.status = 'Repairing script'; } }
);
==== window.opera.defineMagicFunction ====
Этот метод может использоваться UserJS для отмены глобальных функций, определенных постоянными скриптами. Он имеет два параметра:
=== Name ===
Строка приводит имя переменной, которая должна быть отменена.
=== Implementation ===
Функция, которая должна быть запущена вместо функции, определенной страницей. Функцию будут передавать следующие параметры:
- Ссылка на реальную функцию, определенную страницей
- Объект, который был бы упомянут ключевым словом '''this' '' в реальной функции.
- Любые параметры, которые должны быть переданы реальной функции (каждый передается как отдельный параметр для ''magic'' функции).
Например:
window.opera.defineMagicFunction(
'getLayer',
function ( oRealFunc, oThis, oParam1, oParam2 ) {
return oParam1.getElementById('oParam2').style;
}
);
Этот пример отменяет функцию '''f' ''. Если объект '''this' '' обращается к объекту '''window' '', он возвращает ''false''. В противном случае он вместо этого только выполнит реальную функцию:
window.opera.defineMagicFunction(
'f',
function( real, thisObject ) {
if( thisObject == window ) {
return false;
} else {
return real.apply( thisObject, arguments.slice(2) );
}
}
);
==== window.opera.addEventListener ====
Это родовой метод используется для добавления ожиданий событий скриптами UserJS. При обнаружении события, обработчик события передает объект [[userjs_specs#ob_ekt_UserJSEven#|'''UserJSEvent''']] (который также доступен через '''window.event'''). В дополнение к обычным свойствам события, в зависимости от того, какой тип события обнаружен, объект ''UserJSEvent'' может также заполнить свойства '''element' '', '''event' '', '''listener' '', '''eventCancelled' '', '''propagationStopped' '', '''source' '' и '''returnValue' ''. Некоторые события могут быть прекращены используя ''preventDefault'', и это может быть использовано для предотвращения выполнения скрипта или обработчика событий.
Ожидания событий пользовательских скриптов могут быть добавлены почти в любом месте UserJS-файла. Ожидания не могут быть добавлены функциями обработчика для регулярных событий, или сценариями, активизированными таймерами. Следующие события могут быть обнаружены:
=== BeforeExternalScript ===
Происходит в том случае, когда встречается элемент '''SCRIPT' '' с атрибутом '''SRC' ''. Элемент скрипта доступен в качестве атрибута элемента '''UserJSEvent' '' файла UserJS. Если отменено, то внешний код не загружается и элемент скрипта не выполняется. В дополнении, если он отменен, событие '''BeforeScript' '' не происходит.
=== BeforeScript ===
Происходит до запуска элемента '''SCRIPT' ''. Элемент скрипта доступен в качестве атрибута элемента '''UserJSEvent' ''. Содержимое скрипта доступно в качестве свойства текста элемента скрипта, и также может быть перезаписано:
UserJSEvent.element.text = UserJSEvent.element.text.replace(/!=\s*null/,'');
Событие '''BeforeScript' '' происходит для ''inline'' скрипта также, как и внешний скрипт, включая скрипты с типами, которые Opera нормально не может выполнять (например, VBScript). Если отменено, то элемент скрипта не запускается.
=== AfterScript ===
Происходит после того, как завершится выполнение элемента '''SCRIPT' ''. Элемент скрипта доступен в качестве атрибута элемента '''UserJSEvent' ''.
=== BeforeEvent ===
Происходит до того, как произошли события регулярного скрипта, независимо от того, было ли это событие обработано какими-нибудь обработчиками событий. Регулярное событие доступно в качестве атрибута события '''UserJSEvent' ''. Если отменено, то регулярное событие не происходит, выполняется его действие по-умолчанию, и любые ассоциированные события '''BeforeEventListener' '' не происходят.
=== BeforeEvent.type ===
Также, как и '''BeforeEvent' '', но происходит только для событий определенных типов (например, '''BeforeEvent.click'''). В Opera 8, если ожидания зарегистрированы для соответствования событию '''BeforeEvent.type' '', то не происходит событие '''BeforeEvent' ''. В Opera 9 – происходят оба.
=== AfterEvent ===
Происходит после того, как сработает и обработается регулярное событие, но до выполнения его действия по-умолчанию. Регулярное событие доступно в качестве атрибута события '''UserJSEvent' ''. Если отменено, то будут игнорироваться любые попытки обработчика регулярных событий отменить регулярное событие. Объект '''UserJSEvent' '' может также иметь свойство '''eventCancelled' '', которое установится в '''true' '', если любой обработчик регулярных событий отменит событие.
=== AfterEvent.type ===
Также, как и '''AfterEvent' '', но происходит только для событий определенных типов (например, '''AfterEvent.click'''). В Opera 8, если ожидания зарегистрированы для соответствования событию '''AfterEvent.type event' '', то не происходит событие '''AfterEvent' ''. В Opera 9 – происходят оба.
=== BeforeEventListener ===
Происходит до вызова ожидания регулярного события. Регулярное событие доступно в качестве атрибута события '''UserJSEvent' '', и вызываемое ожидание доступно в качестве ожидания '''UserJSEvent' ''. Если отменено, то не может быть вызвано ожидание регулярного события.
=== BeforeEventListener.type ===
Также, как и '''BeforeEventListener' '', но происходит только для событий определенных типов (например, '''BeforeEventListener.click'''). В Opera 8, если ожидания зарегистрированы для соответствования событию '''BeforeEventListener.type' '', то не происходит событие '''BeforeEventListener' ''. В Opera 9 – происходят оба.
=== AfterEventListener ===
Происходит после вызова ожидания регулярного события. Регулярное событие доступно в качестве атрибута события '''UserJSEvent' '', и вызываемое ожидание доступно в качестве атрибута ожидания '''UserJSEvent' ''. Если отменено, то будут игнорироваться любые попытки обработчика регулярных событий отменить распространение регулярного события. Объект '''UserJSEvent' '' также имеет свойство '''propagationStopped' '', которое установится в '''true' '', если любой обработчик регулярных событий отменит распространение события.
=== AfterEventListener.type ===
Также, как и '''AfterEventListener' '', но происходит только для событий определенных типов (например, '''AfterEventListener.click'''). В Opera 8, если ожидания зарегистрированы для соответствования событию '''AfterEventListener.type' '', то не происходит событие '''AfterEventListener' ''. В Opera 9 – происходят оба.
=== BeforeJavascriptURL ===
Происходит до выполнения '''javascript:' '' в URL. Код JavaScript, который должен быть выполнен (весь код в URL после '''javascript:'''), доступен в качестве атрибута исходного кода '''UserJSEvent' '', и также может быть перезаписан. Если отменено, то '''javascript:' '' в URL не выполняется.
=== AfterJavascriptURL ===
Происходит после выполнения '''javascript:' '' в URL. выполненный код JavaScript (весь код в URL после '''javascript:''') доступен в качестве атрибута исходного кода '''UserJSEvent' '', и любое значение, возвращенное этим кодом, доступно в качестве атрибута '''returnValue' '' события '''UserJSEvent' ''. Атрибут '''returnValue' '' также может быть перезаписан. Если отменено, то возвращенное значение не может быть использовано в качестве исходного кода новой страницы.
==== window.opera.removeEventListener ====
Метод может использоваться для удаления ожиданий событий UserJS, которые добавлены использованием '''window.opera.addEventListener' ''. Он не может использоваться в том случае, если ожидание добавлено в качестве анонимной функции. Для получения дополнительной информации, смотрите [[http://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-Registration-interfaces-h3|События W3C DOM Level 2 — Спецификация интерфейсов регистрации событий]].
==== window.opera.pushXSLTransform ====
Этот метод может быть использован нормальными скриптами и UserJS для применения таблиц стилей XSL к текущему документу. Он имеет один параметр:
== Stylesheet ==
Любой документ, корневым элементом которого является или '''xsl:stylesheet' '' или '''xsl:transform' '', или сам элемент '''xsl:stylesheet' ''.
При необходимости он может применяться несколько раз. Каждое преобразование будет применяться к результату предыдущего преобразования.
Пример:
window.opera.pushXSLTransform(
(new DOMParser()).parseFromString(
' ... ',
'text/xml'
)
);
==== window.opera.popXSLTransform ====
Этот метод может быть использован нормальными скриптами и UserJS для удаления последней таблицы стилей XSL, которая была применена с использованием '''pushXSLTransform' ''. Он не имеет никаких параметров.
==== window.opera.setOverrideHistoryNavigationMode ====
Этот метод может быть использован UserJS для установки режима навигации по истории, который должна использовать Opera для текущего документа. Он имеет один параметр:
=== Mode ===
Одно из значений: '''automatic' '', '''compatible' '', или '''fast' ''.
Смотрите [[http://www.opera.com/support/search/supsearch.dml?index=827|статью в базе знаний]] для получения дополнительной информации.
==== window.opera.getOverrideHistoryNavigationMode ====
Возвращает последнее значение режима навигации по истории, которое установлено для текущего документа с использованием '''setOverrideHistoryNavigationMode' ''. По-умолчанию – в '''automatic' ''.
===== Объект UserJSEvent =====
Это объект события, передаваемый в функции обработчика событий UserJS (он также доступен через '''window.event'''). Также, как и обычные свойства объекта события, он имеет те, которые характерны для событий UserJS. В то время, как многие из свойств в UserJS используются редко (например, свойства '''currentTarget' '', '''srcElement' '', и '''target' '' – все они ссылаются на '''window.opera'''), следующие свойства и методы являются самыми используемыми:
=== element ===
Объект, только чтение: элемент скрипта. Доступны все используемые DOM-методы, такие как '''getAttribute' '' и '''setAttribute' ''. Доступен для событий '''BeforeExternalScript' '', '''BeforeScript' '' и '''AfterScript' ''.
=== element.text ===
Строка, чтение-запись: скрипт, который должен быть запущен. Доступна для событий '''BeforeScript' '' и '''AfterScript' ''. В отличии от нормальных скриптов страницы, UserJS позволяют смотреть исходный код скрипта из любого домена, а не только из того домена, из которого получена текущая страница.
=== event ===
Объект, только чтение: объект регулярного события. Доступен для событий '''BeforeEvent' '' и '''AfterEvent' ''.
=== eventCancelled ===
Булев, только чтение: говорит если обработчик событий отменяет событие. Доступен для событий '''AfterEvent' ''.
=== listener ===
Функция, только чтение: ссылка на функцию обработчика событий. Доступна для событий '''BeforeEventListener' '' и '''AfterEventListener' ''.
=== preventDefault ===
Функция, только чтение: предотвращает действия по-умолчанию, например: предотвращение запуска скрипта, предотвращения происхождения событий, или предотврещение блокировки обработчиком событий подтверждения формы. Доступна для всех событий, но не имеет эффекта с событиями '''AfterScript' ''.
=== propagationStopped ===
Булев, чтение-запись: говорит если обработчик событий останавливает распространение события. Доступен для событий '''AfterEventListener' ''.
=== returnValue ===
Строка, чтение-запись: значение, возвращенное скриптом. Доступна для событий '''AfterJavascriptURL' ''.
=== source ===
Строка, чтение-запись: скрипт, который должен запуститься, или который уже выполнился. Доступна для событий '''BeforeJavascriptURL' '' и '''AfterJavascriptURL' ''.
=== type ===
Строка, только чтение: тип обнаруженного события; например: '''BeforeJavascriptURL'.'' Доступен для всех событий.
--------------
Страница 4 из 4 **[[..examples|<]]** | >
--------------
**Оригинал страницы:** [[http://www.opera.com/support/tutorials/userjs/specs/|Take Control with User JavaScript — Specifications]]
[[http://www.opera.com/|Copyright Opera Software ASA]]. Все права зарезервированы
[[http://www.operafan.net/|OperaFan.net]], 2007. Ermir, неофициальный перевод.