~~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, неофициальный перевод.