Opera UserJS 官方教程 - 使用 UserJS 掌控页面

2024-04-07 13:08

本文主要是介绍Opera UserJS 官方教程 - 使用 UserJS 掌控页面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

感谢翻译团队成员 epandassomhinvigorate 的翻译。

简介

UserJS (User Javascript, 用户 Javascript) ,使您可以为Opera所访问的每一个页面,指定本地 JavaScript 文件。

UserJS 具有多种用途,包括如下:
  • 修复网页上有问题的脚本
  • 通过对网页改变或添加自己的内容,来增强网页功能
  • 控制页面上允许运行什么脚本,以及允许脚本做什么
  • 通过向 UserJS 中添加功能,简化用户书签栏

此教程最近更新至 Opera9.0 版。


安全性

分享由其他人创建 UserJS 文件是可以的,但如果那些脚本库来自您不认识或不信任的某人,请你千万不要安装和使用。如有疑问,请将脚本发到 Opera 的论坛、新闻组、邮件列表里,来询问你想使用的脚本,是否是免费并且编写的很好。

启用之后,UserJS 会被载入你所访问的大部分网页,包括那些带有框架及内嵌框架的页面。任何创建于 UserJS 中的全局函数和变量,都是可用的,并且可以被这些页面上任何脚本发现。基于这个原因,为了保护您的隐私和安全,我们建议您在您的 UserJS 中,不要包括任何的敏感资料。默认情况下,UserJS 将不会在安全页面上加载。

要查看 UserJS 是否启用,参见“帮助” > “关于Opera”或者 Opera:about。如果启用了 UserJS ,将在“路径”下列出" UserJS 文件" 路径。

注意:UserJS 将不会载入到任何使用 Opera: 协议的页面。


功能

UserJS (用户脚本)可以象所访问页面的一部分那样被加载并执行。它在页面首个脚本之前就立即运行。如果页面本身不包含任何脚本,UserJS 将在页面即将完成加载时立即执行。通常 UserJS 在页面 DOM 载入完成前运行。(注意这种情况不适用于 Greasemonkey 脚本。具体细节可参考下文中的 Greasemonkey 脚本实例 。)访问 opera: 协议的页面将不会加载 UserJS 。默认情况下,访问 https: 协议的页面也不会加载 UserJS。

用户 JavaScript 可以实现所有正常脚本的功能,包括检测事件、创建变量、创建函数和读取为页面保存的 cookies 等等。不仅如此,用户 JavaScript 还能执行一些特别功能。它可以根据需要控制页面加载哪些脚本、改写页面自身的脚本、拦截页面正在检测的事件、改变事件具体内容和覆盖页面自身的变量和函数。

window.opera 对象有如下四个方法来实现上述特别功能:
  • window.opera.defineMagicVariable
  • window.opera.defineMagicFunction
  • window.opera.addEventListener
  • window.opera.removeEventListener

关于这些方法后面会有更深入的说明。注意:这些方法只能从 UserJS 中调用才会有效,从常规页面脚本中进行调用将被忽略。


添加 UserJS

要启用 UserJS ,依次点击工具 > 选项 > 高级 > 内容 > JavaScript 选项,并选择您存放 UserJS 文件的路径。Opera 将加载所有指定目录下以 .js 为后缀名的文件,并将其作为 UserJS 文件。如果文件名以 .user.js 结尾,将被视为使用 Greasemonkey 标记

编辑自己的 UserJS ,可以使用文本编辑器,保存到您指定的 UserJS 目录即可。文件将会自动在下一次 Opera 打开页面时载入。应用 UserJS 的修改不需要重新启动 Opera。

为避免在不适用的页面运行整个脚本,最好首先检查页面地址是否符合需要,确保只在适用的页面运行增强或修补功能的脚本。如果没有进行必要的检查可能导致错误发生或者影响性能。有下面两种方式可以检查页面地址:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
if( location.href.match(/^http:example/.com//resources///) ) {


为了防止与页面其他脚本的冲突,最好使用 DOM addEventListener 方法检测事件,而不推荐使用传统的事件注册模型,如
代码: 全选
window.onload = myfunction;
建议事件处理尽可能使用匿名函数。

为了限制某个用户 JavaScript 只在特定页面执行,可以在脚本文件头添加下面的注释文本:
代码: 全选
// ==UserScript==
// @include http://example.com/*
// @include http://www.example.com/*
// @exclude http://example.com/directory/*
// @exclude http://www.example.com/example.html
// ==/UserScript==


您可以根据需要使用足够多的 @include 和 @exclude 声明,以便对脚本作用范围进行限定。


在安全页面上使用 UserJS

为了保护您的安全,在使用 https: 协议的页面上 UserJS 默认为禁用。如果您希望在这些页面上运行 UserJS,可从 opera:config 中启用 User JavaScript on HTTPS 选项。

如果在安全页面上启用了 UserJS ,务必确保 UserJS 文件夹中脚本的安全性。尤其是如果您使用的脚本由他人编写,更应注意安全。如果您启用了这个选项,Opera 将在每次浏览会话第一次访问安全页面时提示是否启用 UserJS 。


使用示例
覆盖特定的变量或函数
UserJS 可以用来覆盖页面上任何脚本设置的变量。这是通过使用 defineMagicVariable 和 defineMagicFunction 方法实现的。 例如,如果一个站点错误识别 Opera 并且试图让 Opera 执行用于其它浏览器的代码:
代码: 全选
var ie = document.all;
UserJS 可以使用类似的函数来覆盖错误的侦测:
代码: 全选
window.opera.defineMagicVariable( 'ie', function () { return 0; }, null );

在页面获取这个变量的值时, 就会运行这个函数, 并使用这个函数返回的值来代替变量的实际值.

载入脚本
侦测什么时候载入, 解释或运行脚本可以使用 window.opera.addEventListener 函数.

在 UserJS 中可以使用 'BeforeScript' 事件来侦测页面上的脚本在什么时候由 JavaScript 引擎解释。如果需要,脚本内容可以被重写,或者避免被解释执行。

例如, 如果一个脚本将一个不存在的属性值与控制进行比较:
代码: 全选
if( node.getAttribute('myattribute') != null ) {
这些值就不可能相等, 因为 getAttribute 应该返回一个空字符串, 但有些浏览器会错误的返回一个空值. 结果, 这个脚本在 Opera 中就会失败, 因为 Opera 会正确的返回一个空值. 为了避免出现这样的问题, 可以用一个 UserJS 来侦测这个脚本在什么时候被解释, 然后将其重写去掉比较语句, 因为它对这种类型的声明不是必须的:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'BeforeScript',
function (e) {
e.element.text = e.element.text.replace(/!=/s*null/,'');
},
false
);
}

如果一个页面引用了会产生错误的外部脚本, 可以使用 'BeforeExternalScript' 来侦测载入脚本的时间并阻止 Opera 载入那个脚本:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'BeforeExternalScript',
function (e) {
if( e.element.getAttribute('src').match(/problem//script/.js$/) ) {
e.preventDefault();
}
},
false
);
}


覆盖事件和事件处理器
UserJS 可以使用 'BeforeEvent.type' 中的一个事件来侦测一个脚本事件什么时候发生, 即便是页面上没有脚本监听那个事件. 这些可以用来针对特定的事件类型, 例如 'BeforeEvent.click'.

你也可以只使用 'BeforeEvent' 侦测所有类型的事件. 在 Opera 8 中, 如果你监听一个更具体的 'BeforeEvent.type' 将不会触发这个函数. 例如, 如果你监听 'BeoreEvent.click' , 'BeforeEvent' 事件将不会由点击事件触发. 注意, 因为 'BeforeEvent' 会侦测到非常多的事件, 使用起来可能会影响性能.

要阻止页面上的脚本侦测载入中的事件, 可以使用 'BeforeEvent.load' 来取消. 注意, onload 也会触发到其它的元素, 如图像, 所以脚本要检查这个事件是否是针对这个文档:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener('BeforeEvent.load',function (e) {
//check that it is the page loading, not just an image
if( e.event.target instanceof Document ) {
e.preventDefault();
}
},false);
}

在很多情况下, 'BeforeEventListener' 事件会更有用, 因为它们只有在页面上的一个脚本监听这些事件时才会触发. 它们提供了到事件对象和事件处理器函数的访问途径. 可以使用 preventDefault 来取消这些事件.

可以使用 'BeforeEventListener.type' 来更具体的侦测这些事件, 道理和你可以使用 'BeforeEvent.type' 代替 'BeforeEvent' 一样的. 例如, 要阻止一个脚本监听鼠标移动:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'BeforeEventListener.mousemove',
function (e) {
e.preventDefault();
},
false
);
}

你可以更具体的针对那些需要去掉的功能. 在下面这个例子中, UserJS 检查事件处理器是否是由页面提供的 'myMouseTrail' 函数. 然会它会改变事件对象假装鼠标的位置是在页面的顶端:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'BeforeEventListener.mousemove',
function (e) {
if( e.listener == moveMouseTrail ) {
e.event.clientY = 0;
e.event.pageY = 0;
}
},
false
);
}

'AfterEvent' 事件允许 UserJS 检查页面上的一个脚本是否取消了一个动作. 若一个动作被阻止, UserJS 可以对其进行改变并允许执行那个动作.

例如, 当你提交一个表格时, 默认的动作是针对被提交的表格的, 然后从服务器返回一个新的页面. 如果页面上的一个脚本截获了提交事件, 它可以对表格进行验证, 并只允许通过验证的表格才能进行提交. 如果验证脚本错误的判断了表格验证结果的准确性并且造成表格不能被提交, 可以使用一个 UserJS 侦测这个情况什么时候发生然后阻止那个脚本的执行:
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'AfterEvent.submit',
function (e) {
if( e.eventCancelled ) {
//the script has tried to stop the form submission
if( confirm( 'Submission was prevented. Submit anyway?' ) ) {
//prevent the script from preventing the form submission
e.preventDefault();
}
}
},
false
);
}


JavScript URL
页面也可以使用 JavaScript URL 作为启动脚本的一种方式, 如, 将 JavaScript 包含在一个链接的 HREF 属性中, 或包含在一个表格的 TARGET 属性中. UserJS 可以侦测这些脚本什么时候被激活, 然后进行阻止或重写那个即将运行的脚本. 注意, 这也会影响使用 javascript: 协议的 bookmaklet.

例如, 如过一个页面使用 JavaScript URL 打开一个新窗口, 可以使用 UserJS 中的 'BeforeJavascriptURL' 事件将其重写成打开新窗口之前先显示一个确认对话框.
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'BeforeJavascriptURL',
function (e) {
if( e.source.indexOf('window.open') != -1 ) {
//rewrite the script to confirm before opening windows
e.source = e.source.replace(
/window/.open/g,
'if( confirm(/'Allow window to open?/') ) window.open'
);
}
},
false
);
}

JavaScript URL 可能也会返回一个值. 某些页面可能会有意的使用这个值, 以用新的内容来覆盖其自身值, 但有时候也会错误的返回一个值并错误的改写页面内容. UserJS 可以使用 'AfterJavascriptURL' 事件截获这个返回值并在写入新内容前显示一个确认对话框. 它也可以在需要的时候改写新内容.
代码: 全选
if( location.hostname.indexOf('example.com') != -1 ) {
window.opera.addEventListener(
'AfterJavascriptURL',
function (e) {
if( typeof( e.returnValue ) == 'string' ) {
if( confirm('Overwrite page?') ) {
e.returnValue += 'Changed by User JavaScript';
} else {
e.preventDefault();
}
}
},
false
);
}


一般脚本和事件
UserJS 不一定基于这些特殊的事件, 也可以接受一般的脚本操作. 例如, 要在每个页面上显示一个提示, 说明 Opera 使用的渲染模式 (QuirksMode或CSS1Compat), 你可以用以下方法:
代码: 全选
document.addEventListener(
'load',
function (e) {
if( !document.body ) { return; }
var mydiv = document.createElement('div');
mydiv.style.position = 'fixed';
mydiv.style.top = '0px';
mydiv.style.right = '0px';
mydiv.style.border = '1px solid #000';
mydiv.style.backgroundColor = '#fff';
mydiv.style.color = '#000';
mydiv.appendChild(document.createTextNode(document.compatMode))
document.body.appendChild(mydiv);
},
false
);


Greasemonkey 脚本
Opera 可以运行很多 Greasemonkey 脚本. 这些脚本是用在 Mozilla 系列浏览器上的 Greasemonkey 增强功能上的. 要让 Opera 识别某个脚本使用了 Greasemonkey 符号, 包含脚本的文件必须以 .user.js 结尾(其它所有的以 .js 结尾的文件都被认为是一般的 UserJS). 使用 Greasemonkey 符号的脚本在处理上稍有不同 (为了与现存的脚本兼容):
  • 不能在其中使用 window.opera.addEventListener 和相关的方法, 或 magic 函数和变量.
  • 它们在页面完成载入后执行, 在页面的 DOM 创建之后, 运行定义的加载处理之前.

因为这一点不同的处理方式, Greasemonkey 脚本一般只能在问题或错误出现之后才能修正这些错误. 因此, 这些脚本最好是用来增加功能而不是用来修正问题脚本.

尽管可以使用一个一般的页面地址侦测, Greasemonkey 脚本一般使用 ‘==UserScript==’ 注释块来限制脚本执行的页面地址. 总的来说, 用于每个增强功能的 JavaScript 代码是包含在其自身的文件里面的, 尽管这并一定是必须的.

因为脚本是在运行任何加载事件处理器之前执行的, 可以以内嵌方式编写, 但要避免产生全局变量, 最好是使用一个立即激活的匿名函数. 例如, 要阻止一个页面使用 target="_blank" 在新窗口打开链接, 可以使用下面的语句:
代码: 全选
(function () {
for( var i = 0; document.links[i]; i++ ) {
if( document.links[i].target == '_blank' ) {
document.links[i].target = '_self';
}
}
})();

使用 Greasemonkey 标记和在一个一般的 UserJS 中创建一个 'BeforeEvent.load' 监听事件 (参看覆盖事件和事件处理器) 效果是一样的.

提示: 很多 Greasemonkey 脚本使用 window._content 来引用窗口对象. 这在 Opera 中是不必要的, 要避免在每个含有这个语句的文件中进行编辑, 你可以在一个一般的 UserJS 文件夹中简单的加入下面的内容:
代码: 全选
window._content = window;


控制导航模式
UserJS 可以覆盖 Opera 的历史导航模式, 将其设置为一直快速或一直兼容. 关于这些模式的更多细节, 参看 知识库文章 . 这些模式可以设置为使用 setOverrideHistoryNavigationMode 方法.
代码: 全选
opera.setOverrideHistoryNavigationMode('fast')



可用的方法和事件
  • window.opera.defineMagicVariable
  • window.opera.defineMagicFunction
  • window.opera.addEventListener
  • window.opera.removeEventListener
  • window.opera.setOverrideHistoryNavigationMode
  • window.opera.getOverrideHistoryNavigationMode

window.opera.defineMagicVariable

UserJS 中可以使用这个方法覆盖规则脚本定义的全局变量. 它接受 3 个参数:

Name
提供要覆盖变量的名称的字符串.

Getter
当任何时候一个脚本试图访问变量内容时运行的函数. 这个函数返回的任何值作为变量的值. 有一个参数会被传送至这个函数; 变量的目前值.

Setter
可选; 当任何时候一个脚本试图访问变量内容时运行的函数. 有一个参数会被传送至这个函数; 脚本试图指派给变量的那个值. 如果不需要 setter 函数, 必须使用 null 值代替.

例如:
代码: 全选
window.opera.defineMagicVariable(
'isGoodBrowser',
function (curVal) { return true; },
function (newVal) { if(!newVal) { window.status = 'Repairing script'; } }
);


window.opera.defineMagicFunction

UserJS 中可以使用这个方法覆盖规则脚本定义的全局函数. 它接受 2 个参数:

Name
提供要覆盖变量的名称的字符串.

Implementation
代替页面内定义的函数运行的函数. 下面的参数会被传送到这个函数:
  1. 页面定义的真实函数的一个引用.
  2. 真实函数中关键词 'this' 指代的对象.
  3. 任何会传送至真实函数的参数(每一个都作为一个单独的参数传送至 magic 函数).

例如:
代码: 全选
window.opera.defineMagicFunction(
'getLayer',
function ( oRealFunc, oThis, oParam1, oParam2 ) {
return oParam1.getElementById('oParam2').style;
}
);


该示例覆盖函数 "f". 如果 'this' 对象指代窗口对象, 返回错误值. 否则运行真实的函数:
代码: 全选
window.opera.defineMagicFunction(
'f',
function( real, thisObject ) {
if( thisObject == window ) {
return false;
} else {
return real.apply( thisObject, arguments.slice(2) );
}
}
);


window.opera.addEventListener
这是对 UserJS 添加监听事件的一般方法. 当侦测到一个事件时, 会有一个 UserJSEvent object (也可以通过 window.event 获得)传送至事件处理器. 除了常规的事件属性之外, 根据要侦测的事件的类型, UserJSEvent 对象也会包含 'element', 'event', 'listener', 'eventCancelled', 'propagationStopped', 'source' 和 'returnValue' 属性. 某些事件可以通过 prventDefault 取消, 可以用来阻止脚本或事件处理器的执行.

UserJS 的监听事件几乎可以在任何位置添加. 不能通过处理函数为规则事件添加listener, 也不能通过由计时器激活的脚本添加. 可以侦测到下面的事件:

BeforeExternalScript
遇到一个带有 SRC 属性的 SCRIPT 元素时触发. 脚本元素可以通过 UserJSEvent 的元素属性获得. 如果被取消, 则不会载入外部资源且脚本元素不会执行. 另外, 如果被取消, 则不会触发 BeforeScript 事件.

BeforeScript
在一个 SCRIPT 元素执行前触发. 脚本元素可以通过 UserJSEvent 的元素属性获得. 脚本的内容可以通过脚本元素的文字属性获得, 也是可以编写的:
代码: 全选
UserJSEvent.element.text = UserJSEvent.element.text.replace(/!=/s*null/,'');
这个 BeforeScript 事件可以通过嵌入脚本或外部脚本触发, 包含 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 事件而注册, 则不会触发 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 的源属性获得, 代码返回的值都可以通过 UserJSEvent 的返回值属性获得. 这个返回值 (returnValue) 也是可编写的. 如果被取消, 任何返回值都不会作为新页面的源.

window.opera.removeEventListener
这个可以用来去掉通过 window.opera.addEventListener 添加的 User JavaScript 事件监听函数. 如果事件函数是由一个匿名函数增加的则不能使用. 更多细节参看 W3C DOM Level 2 Events - Event registration interfaces specification .

window.opera.setOverrideHistoryNavigationMode
这个方法可以用在 UserJS 中设置对当前文档Opera应该使用何种历史导航模式. 它接受 1 个参数:

Mode
'automatic', 'compatible', 或 'fast' 中的一个.

参看 知识库 中的更多细节.

window.opera.getOverrideHistoryNavigationMode
获得上一个通过 setOverrideHistoryNavigationMode 设置的当前文档的历史导航模式值. 默认为'automatic'.


UserJSEvent 对象
这是传送至 UserJS 事件处理器函数的事件对象 (也可以通过 window.event)获得. 和一般的事件对象属性一样, 它有一些专门针对 UserJS 事件的属性. 很多属性在 UserJS 中的功能都不大 (例如, currentTarget, srcElement, 和 target properties 都引用 window.opera), 但下面的属性和方法是最有用的:

element
对象(object), 只读: 脚本元素. 所有一般的 DOM 方法都是可以获得的, 例如 getAtrribute 和 setAtrribute. 在 'BeforeExternalScript', 'BeforeScript', 和 'AfterScript' 事件中可以使用.

element.text
String 字符串, 可读写: 即将执行的脚本. 在 'BeforeScript' 和 'AfterScript' 事件中可以使用. 和规则的页面脚本不一样, UserJS 可以查看所有域上的脚本源, 而不限于当前页面所使用的域.

event
对象(object), 只读: 规则时间对象. 在 'BeforeEvent' 和 'AfterEvent' 事件中可以使用.

eventCancelled
逻辑值, 只读: 表示一个事件处理器是否取消了某个事件. 在 'AfterEvent' 事件中可以使用.

listener
函数, 只读: 对事件处理器函数的引用. 在 'BeforeEventListener' 和 'AfterEventListener' 事件中可以使用.

preventDefault
函数, 只读: 阻止默认的动作, 例如; 阻止一个脚本的执行, 阻止一个事件的触发, 或阻止一个事件处理器阻挡提交表格的操作. 在所有事件中都可以使用, 但在 'AfterScript' 事件中没有效果.

propagationStopped
String 字符串, 可读写: 表示一个事件处理器是否停止了事件的传播. 在 'AfterEventListener' 事件中可以使用.

returnValue
String 字符串, 可读写: 脚本返回的值. 在 'AfterJavascriptURL' 事件中可以使用.

source
String 字符串, 可读写: 将要执行的脚本或已经执行的脚本. 在 'BeforeJavascriptURL' 和 'AfterJavascriptURL' 事件中可以使用.

type
字符串, 只读: 侦测到的事件的类型; 例如 'BeforeJavascriptURL'. 在所有事件中都可以使用.

这篇关于Opera UserJS 官方教程 - 使用 UserJS 掌控页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/882681

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]