`

火狐插件油猴Greasemonkey系列一

 
阅读更多

油猴Greasemonkey是火狐浏览器user script插件,类似于浏览器端的页面拦截器,对于补充修改增强遗留系统功能有不错的效果。缺点在于插件是安装在浏览器端,部署不是很方便,所以只能是个小众软件。

本系列主要测试油猴插件引用jQuery库的操作。火狐版本25.0,油猴插件版本1.15.1-signed。

引入的两个测试jQuery版本为:页面版本2.2.1,插件版本1.12.1。

新建web项目,测试页面page.html,位于上下文的根部,用户脚本为test.user.js,位于userscripts目录下。

文件结构如图:


 

测试情形1:page.html没有引入jquery,元数据@grant none,此时用户脚本运行在非特权无沙盒中:

page.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>游猴插件测试页面</title>
</head>
<body>
	<div id="container">
		<button onclick="alert('page button click event:' + $.fn.jquery)">content button</button>
	</div>
	<div id="install"><a href="userscripts/test.user.js">用户脚本安装</a></div>
</body>
</html>

 

 test.user.js

// ==UserScript==
// @name        test
// @namespace   http://yc.telecomjs.com/gm
// @description 油猴jQuery库测试
// @include     http://localhost:8080/gm/page.html
// @require		http://localhost:8080/gm/libs/jquery/jquery-1.12.1.min.js
// @grant none
// @version     1.0
// ==/UserScript==

console.log($.fn.jquery);

$('#container').append('<button id="script_btn">script button</button>');

$('#script_btn').click(function(){
	alert('script button click event');
});

 经过firebug查看控制台,jQuery版本号能够正确显示,扩充的按钮能够正常显示,单击事件正常,点击页面按钮,显示:page button click event:1.12.1,说明用户脚本的库入侵了页面,要避免这样使用jQuery。

 

测试情形2:page.html没有引入jquery,元数据@grant unsafeWindow,此时用户脚本运行于沙盒中:

修改 test.user.js中的@grant none为@grant unsafeWindow,测试正常。

 

测试情形3:page.html中引入jquery,元数据@grant none,此时用户脚本运行在非特权无沙盒中:

 page.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>游猴插件测试页面</title>
<script type="text/javascript" src="libs/jquery/jquery-2.2.1.min.js"></script>
<script type="text/javascript">
	console.log('page jquery:' + $.fn.jquery);
	$(function(){
		$('#page_btn').click(function(){
			alert('page button click event:' + $.fn.jquery);
		});
	});
</script>
</head>
<body>
	<div id="container">
		<button id="page_btn">content button</button>
	</div>
	<div id="install"><a href="userscripts/test.user.js">用户脚本安装</a></div>
</body>
</html>

 test.user.js
// ==UserScript==
// @name        test
// @namespace   http://yc.telecomjs.com/gm
// @description 油猴jQuery库测试
// @include     http://localhost:8080/gm/page.html
// @require		http://localhost:8080/gm/libs/jquery/jquery-1.12.1.min.js
// @grant none
// @version     1.2
// ==/UserScript==

console.log('user script jquery:' + $.fn.jquery);

$('#container').append('<button id="script_btn">script button</button>');

$('#script_btn').click(function(){
	alert('script button click event:' + $.fn.jquery);
});
 
经过测试:
console输出:
page jquery:2.2.1
user script jquery:1.12.1
点击content button,输出:page button click event:1.12.1
点击script button,输出:script button click event:1.12.1
这个测试结果说明:用户脚本在页面所有脚本执行完成后执行,所以console的jQuery版本是2.2.1,脚本引入jQuery会替换页面的jQuery,原因在于jQuery中有将$和jQuery赋值给window.$ 和 window.jQuery的操作,@grant none的情形下,window等于unsafeWindow,脚本的jQuery就替代了页面jQuery,在不同版本下的jQuery,有可能会导致页面原始功能异常,所以要特别小心,下面是两种安全的情形。
 
测试情形4:page.html引入jquery,元数据@grant unsafeWindow,此时用户脚本运行于沙盒中:
将情形3中的@grant none修改为@grant unsafeWindow
此时测试结果:
console输出:
page jquery:2.2.1
user script jquery:1.12.1
点击content button,输出:page button click event:2.2.1
点击script button,输出:script button click event:1.12.1
用户脚本运行在沙盒里面,没有与页面js冲突,可以解决情形3的问题。
 
测试情形5:page.html中引入jquery,元数据@grant none,此时用户脚本运行在非特权无沙盒中:
修改情形3的 test.user.js的文件为:
// ==UserScript==
// @name        test
// @namespace   http://yc.telecomjs.com/gm
// @description 油猴jQuery库测试
// @include     http://localhost:8080/gm/page.html
// @require		http://localhost:8080/gm/libs/jquery/jquery-1.12.1.min.js
// @grant none
// @version     1.5
// ==/UserScript==
this.$ = this.jQuery = jQuery.noConflict(true);
console.log('user script jquery:' + $.fn.jquery);

$('#container').append('<button id="script_btn">script button</button>');

$('#script_btn').click(function(){
	alert('script button click event:' + $.fn.jquery);
});
测试结果同情形4,说明this.$ = this.jQuery = jQuery.noConflict(true);将页面的jQuery版本做了复原。
 
测试情形6:page.html中未引入jquery,元数据@grant none,此时用户脚本运行在非特权无沙盒中:
page.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>游猴插件测试页面</title>
</head>
<body>
	<div id="container">
		<button onclick="alert('page button click event:' + $)">content button</button>
	</div>
	<div id="install"><a href="userscripts/test.user.js">用户脚本安装</a></div>
</body>
</html>
 
test.user.js
// ==UserScript==
// @name        test
// @namespace   http://yc.telecomjs.com/gm
// @description 油猴jQuery库测试
// @include     http://localhost:8080/gm/page.html
// @require		http://localhost:8080/gm/libs/jquery/jquery-1.12.1.min.js
// @grant none
// @version     1.6
// ==/UserScript==
this.$ = this.jQuery = jQuery.noConflict(true);
console.log('user script jquery:' + $.fn.jquery);

$('#container').append('<button id="script_btn">script button</button>');

$('#script_btn').click(function(){
	alert('script button click event:' + $.fn.jquery);
});
console输出:
user script jquery:1.12.1
点击content button,输出:page button click event:undefined
点击script button,输出:script button click event:1.12.1
结果是正常的。
 
总结,在油猴用户脚本中引入jQuery库,最好运行在沙盒环境下,简单地加一条元数据@grant unsafeWindow即可;如果运行在@grant none情形下,在脚本的顶部一定要添加一条this.$ = this.jQuery = jQuery.noConflict(true);以防止与原页面jQuery库冲突,导致原页面功能异常。
 
系统二准备测试下用户脚本如何引入bootstrap的css文件方案。
  • 大小: 13.1 KB
分享到:
评论

相关推荐

    Firefox用户脚本管理器(Greasemonkey) v1.10火狐插件.rar

    Greasemonkey是Mozilla Firefox的一个附加组件。它让用户安装一些脚本使大部分HTML为主的网页于用户端直接改变得更方便易用。随着Greasemonkey脚本常驻于浏览器,每次随着目的网页打开而自动做修改,使得运行脚本的...

    Tampermonkey4.12_0(油猴)

    油猴可以在主流的浏览器如Google Chrome、Firefox、Microsoft Edge等上安装。用户只需前往Chrome Web Store或相应的浏览器扩展商店搜索Tampermonkey,点击添加到浏览器即可。一旦安装完成,它会在浏览器的工具栏上...

    firefox必备:新手也一样玩转火狐.docx

    油猴控是Firefox浏览器中一个非常强大的插件,它可以通过简单的脚本来修改网站或网页的布局、外观、操作。油猴控可以解决很多问题,如某个网站用起来费劲,或者网站隐藏图片链接或找不到视频下载链接等问题。油猴控...

    Chrome最新4.0版本支持GreaseMonkey脚本

    GreaseMonkey是一款著名的浏览器扩展,最初只适用于Firefox,允许用户通过安装自定义的JavaScript脚本来增强网页功能或改变网页行为。这些脚本通常由开发者编写,利用HTML和JavaScript语言,具有轻量级和可定制性强...

    Firefox_ucursos_plus:U-Courses+ 中的油脂猴扩展

    ## U-Courses + for Firefox Para instalar esta version de U-Cursos +, necesitas tener previamente instalado en tu versión de firefox. 然后只需,Greasemonkey 将完成...) 它也可以在上作为 Firefox 插件安装。

    TPlink-WDR7500-UITraducao:将 TPLINK-WDR7500 网页界面从中文翻译成葡萄牙语的油脂猴脚本

    为 Firefox 插件安装 Greasemonkey 网址: : 下载或用火狐打开这个脚本,让greasemonkey安装脚本 打开或更新 TPLINK WDR7500 网页界面: : 注意:如果您更改默认 IP 地址 (192.168.1.1),请务必更新脚本文件或...

    电子书寻找方法汇总.docx

    #### 一、油猴插件(Greasemonkey) 油猴插件是一种浏览器扩展工具,能够帮助用户通过自定义脚本来修改网页内容,从而提升浏览体验。这种工具对于寻找电子书资源特别有用,因为它可以通过定制化的脚本帮助用户在特定...

    UC脚本(UserChormeJS)安装及使用方法.pdf

    与Greasemonkey(油猴)脚本不同,UC脚本主要针对整个Firefox浏览器进行配置,而Greasemonkey脚本则主要用于修改特定网页的行为。UC脚本的优势在于其强大的自定义能力,能够实现对浏览器的深度定制,甚至可以替代...

    Let-s-panda:适用于exhentai的Greasy Fork用户脚本

    用户脚本通常基于Greasemonkey(Firefox扩展)或Tampermonkey(跨浏览器扩展)运行。 **exhentai** 是一个知名的动漫成人内容分享网站,它提供了大量的漫画和插图资源。然而,由于其内容特性,访问该网站可能需要...

    UC脚本(UserChormeJS)安装及使用方法.docx

    与**油猴GM脚本(Greasemonkey)**不同,UC脚本针对的是整个Firefox浏览器,而油猴脚本则是针对特定网页或全局网页进行效果增强。UC脚本的强大之处在于它可以实现类似于插件的功能,但不会像插件那样占用过多系统资源...

    Tampermonkey_4.10_chrome.zzzmh.cn.rar

    1. **用户脚本**:Tampermonkey 允许用户编写或安装 Greasemonkey 脚本,这是一种 JavaScript 代码,可以在特定网页上运行,以改变网页内容、行为或添加新功能。 2. **自动化**:许多用户脚本用于自动化重复性的...

    ou-week-finished:GreasemonkeyTampermonkey的简单用户脚本,用于增强开放大学网站

    Greasemonkey是Firefox浏览器的一款插件,而Tampermonkey则适用于Chrome、Firefox、Safari等多款浏览器。这两款工具都为用户提供了一个平台,让他们能够运行由其他开发者编写的用户脚本,或者自己编写脚本来改变特定...

    duolingo-word-bank-dnd:一个最小的浏览器扩展程序,用于在Duolingo上启用单词库答案中的单词拖放

    目录下载Firefox附加组件Opera插件 演示版 局限性扩展名与Duolingo的内部功能紧密相关,这意味着它们方面的重大更改可能会(暂时)破坏它。 如果发生这种情况,您可以: 等我修复它(如果还没有问题,可以打开一个...

    gresemonkey:黑客日的东西

    gresemonkey 黑客日 -2015q2 RDock 广告为firefox安装greasemonkey插件 单击浏览器工具栏中的猴子图标从菜单中选择新建用户脚本从“rdock.user.js”文件复制粘贴内容访问任何雅虎页面黑客日 -2015q1 垂直搜索为fire...

    anki-monkey:用户脚本利用anki-connect插件从网络浏览器向您的anki桌面添加卡

    我仅使用Chrome(TamperMonkey扩展名)和Firefox(GreaseMonkey扩展名)对其进行了测试。安装安装anki-connect插件( )。 如果您使用的是Firefox,请安装滑脂猴子扩展件,如果您使用的是Chrome,则安装篡改猴子。 ...

    WebWhatsapp-Native-DarkMode:将本机暗模式添加到 Web Whatsapp

    火狐扩展 Chrome 扩展程序 边缘延伸 用户脚本安装如果你还没有安装任何用户脚本扩展工具,这里有一个列表,你可以下载并安装到你最喜欢的浏览器暴力猴子篡改猴子GreaseMonkey - 仅适用于 Firefox 单击以下链接之一...

    leetcodepremium-leetcode_hide_premium:隐藏leetcode订阅问题

    这通常可以在Chrome、Firefox等主流浏览器的应用商店找到。 2. 添加脚本:在安装完扩展插件后,你需要将"leetcode_hide_premium"脚本导入到已安装的插件中。这通常可以通过点击插件图标,选择“添加新脚本”,然后...

    tampermonkey_533018.rar

    Tampermonkey支持多种浏览器,包括Chrome、Firefox、Opera等,让用户的网络浏览体验更加个性化和高效。 1. **用户脚本管理**:Tampermonkey的核心功能在于管理用户脚本,这些脚本可以修改网页的行为,例如添加新...

    Userscript-Plus:向当前站点显示所有UserJS,这是为Tampermonkey安装UserJs的简便方法。显示当前网站的所有可用Tampermonkey脚本

    用户脚本+ 显示当前站点上的所有UserJS,更简单的方法为Tampermonkey安装UserJs。 Userscript +是Tampermonkey用户脚本,其作用是当您浏览Web时,会自动从...安装Chrome / Firefox插件Tampermonkey Chrome商店: :

Global site tag (gtag.js) - Google Analytics