`

User Script浏览器用户自定义脚本userscripts

阅读更多

User Script

tomorrow.cyz@gmail.com

 

摘要:本文讲述浏览器技术中常用的user script

一、什么是user script

User scripts或者称userscripts,是用来在客户端(浏览器或者代理服务器)对特定的网页进行修改的脚本,一般用来改变页面的外观或者增加修改功能。User scripts目前常见的是用javascript书写的脚本。

最著名的user scriptsAdBlock,帮助用户拦截广告在内的各种页面元素,并使这些内容不被下载或者显示。

User scripts最早在Firefox上运用(通过Greasemonkey扩展),迄今为止,包括ChromeOperaIESafari等浏览器或内置或通过插件,都对user script进行的支持。详细情况参见http://emulefans.com/userscript-on-various-browsers/

ChromeUser Script的安装最简单,9.0以后的版本,只要user.js后缀的脚本直接拖到浏览器中,在右下角的选择中,选允许,就成功安装了脚本,通过工具à扩展程序菜单,可以进行插件的管理。

Firefox需要安装Greasemonkey插件来支持user script,插件和user script的安装参考http://diveintogreasemonkey.org/install/index.html

二、user  script的书写

书写user script的前提是熟悉htmljavascript。在学习user script时,Dive into Greasmonkeyhttp://diveintogreasemonkey.org/toc/)是一本很棒的教材,几乎是手把手交。

下面以我写的一个user script为例来简单讲述user script的书写。

相信大家平常搜索引擎的使用概率都非常高,对于googlebaidu这两个搜索引擎,大家可能各有喜好,对于我来说,技术方面的问题,我偏向用google进行搜索,但是有时候有些特定的搜索特别是中文搜索,貌似baidu的搜索结果也有优于google的地方,所以我特别希望浏览器提供一个功能,就是我在进行google搜索以后,如果不满意搜索结果,可以直接点击菜单进行baidu搜索,不需要再输入关键词。同样,在baidu搜索以后,如果没有找到合适的结果,则直接点击菜单进行google搜索,同样不需要输入关键词。以前我希望通过修改浏览器内核来实现,自从发现了user script这个东东以后,我发现,用user script来实现这个,只需要几句话,非常之简单,不需要深入内核。

先上一张图,在baidu中搜索”user script”的截图。

 

 

 

          在上图中点击”try google”,转向google搜索。搜索结果如下图,红色标注链接try baidu,可以直接尝试搜索baidu

 

 

 

 

    看了一天的diveintogreasemonkey,写出了如下user script。

         

[javascript] view plaincopy
  1. // ==UserScript==  
  2. // @name         Try another Search engine  
  3. // @author       tomorrow.cyz@gmail.com  
  4. // @namespace    http://t.sina.com.cn/chenyuzhi  
  5. // @description  try another search engine when you perform baidu/google search  
  6. // @include      http://www.baidu.com/s?*  
  7. // @include      http://baidu.com/s?*  
  8. // @include      http://www.google.com.hk/*  
  9. // @include      http://google.com.hk/*  
  10. // ==/UserScript==  
  11. function g_search_func()  
  12. {  
  13.  var keywords=document.getElementById("kw");  
  14.  window.location.href="http://www.google.com.hk/search?q="+keywords.value;  
  15. }  
  16.   
  17. if (document.location.href.indexOf('baidu.com') != -1)  
  18. {  
  19.     var tools = document.getElementById('tools');  
  20.     if (tools) {  
  21.         tools.parentNode.removeChild(tools);  
  22.     }  
  23.     var con = document.getElementById('mCon');  
  24.     if (con) {  
  25.         con.parentNode.removeChild(con);  
  26.     }  
  27.     var menus = document.getElementById('mMenu');  
  28.     if (menus) {  
  29.         menus.parentNode.removeChild(menus);  
  30.     }  
  31.     var allEle, thisEle;  
  32.     allEle = document.evaluate(  
  33.         "//*[@class='tools']",  
  34.         document,  
  35.         null,  
  36.         XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,  
  37.         null);  
  38.     for (var i = 0; i < allEle.snapshotLength; i++) {  
  39.         thisEle = allEle.snapshotItem(i);  
  40.         thisEle.parentNode.removeChild(thisEle);  
  41.     }  
  42.     var google_btn=document.createElement("input");  
  43.     var baidu_btn=document.getElementById("kw").nextSibling;  
  44.     google_btn.setAttribute("type""button");  
  45.     google_btn.setAttribute("name""gsearch");  
  46.     google_btn.setAttribute("value""try google");  
  47.     google_btn.addEventListener('click',g_search_func,true);  
  48.     google_btn.setAttribute("class","btn");  
  49.     baidu_btn.parentNode.insertBefore(google_btn,baidu_btn.nextSibling);  
  50. }  
  51. else  
  52. {  
  53.     var allEle, thisEle;  
  54.     allEle = document.evaluate(  
  55.     "//input[@name='q']",  
  56.     document,  
  57.     null,  
  58.     XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,  
  59.     null);  
  60.     for (var i = 0; i < allEle.snapshotLength; i++) {  
  61.     thisEle = allEle.snapshotItem(i);  
  62.     break;  
  63.     }  
  64.     var keywords=thisEle.value;  
  65.       
  66.     var resultStats=document.getElementById('resultStats');  
  67.     if(resultStats)  
  68.     {  
  69.         var baidu_link=document.createElement("div");  
  70.         baidu_link.innerHTML="<a  class=/"gl nobr/"  style="/" mce_style="/""color:#4373db/" href="/" mce_href="/""http://www.baidu.com/s?wd=" +keywords+ "/"><strong>try baidu</strong></a>";  
  71.     }  
  72. }  

 

    

        我是个javascript和html的菜鸟,所以这个user script,可想而知,写得也不咋样。但作为一个入门介绍的例子,将就着吧。

        user script的开始首先要有meta data。这是固定的格式,说明作者,user script的描述,这些信息在用户安装的时候可能会弹出来提示用户。另外,@include很重要,表示这个user script适用的页面。同@include关键字相反,还有@exclude关键字,过滤掉一些网站。

      推荐使用DOM inpector结合代码来进行学习分析。对于baidu的页面来说,该脚本去掉了tools,mCom,mMenu等元素(也就是手写,设为首页等我认为无用的链接,根据id识别),在这里用到的还都是javascript的语句。有时候baidu的页面中tools没有id,而是name属性,这时候用到了XPath的功能,XPath在用户脚本中非常重要,建议阅读diveintogreasemonkey的4.6节(http://diveintogreasemonkey.org/patterns/match-attribute.html)以及xpath教程。baidu获取关键字是通过getElementById,取value值,就是javascript语句,然后这里用到了一句window.location.href=来进行跳转。另外一个就是try google按钮的加入,其实只要通过DOM inspector找到"百度一下“按钮,然后用javascript实现出来,再调用insertBefore来插入生成的"try google”按钮的节点就可以。对于google的页面,生成的是link,所以更加简单,自己阅读代码吧。

      http://userscripts.org  这个网站提供了大量的user script供大家免费下载学习,还可以在论坛提脚本申请。

             

 

 

参考

1.       UserScript(用户脚本)FirefoxOperaIE678等不同浏览器上的使用(http://emulefans.com/userscript-on-various-browsers/

2.             Greasemonkey的wiki(http://zh.wikipedia.org/w/index.php?title=GreaseMonkey)

3.             Greasemonkey教程(http://diveintogreasemonkey.org/toc/

4.               Operauser script介绍http://kb.operachina.com/node/184

 

分享到:
评论

相关推荐

    qutebrowser-userscripts:qutebrowser的用户脚本

    标题:“qutebrowser-userscripts:qutebrowser的用户脚本” 描述:“qutebrowser-用户脚本,这是针对qutebrowser的用户脚本集合。” 标签:“Python” 在这个主题下,我们将深入探讨qutebrowser的用户脚本及其与...

    infusionsoft-user-script-madness:一个开源项目,为基于 Infusionsoft 的 UserScripts 创建稳定的框架

    1. **UserScripts**:UserScripts是可以在网页上运行的JavaScript代码,通常通过浏览器扩展(如Tampermonkey或Greasemonkey)来注入,它们可以修改网页的行为,以适应用户的特定需求。在这个项目中,UserScripts被...

    user-script-copy-jira-info-for-git:将JIRA键和标题复制到剪贴板的用户脚本

    标题 "user-script-copy-jira-info-for-git" 指的是一种自定义的用户脚本,其目的是为了方便在Git操作中快速获取并复制JIRA问题的关键信息,包括JIRA键和标题。这样的脚本通常被开发者用于提升工作效率,特别是在...

    user-css-script:UserCSS,UserScript存储

    UserScripts通常与如GreaseMonkey(Firefox)或Tampermonkey(Chrome)之类的浏览器插件搭配使用,它们允许用户轻松安装和管理下载的UserScripts。 结合“JavaScript”这个标签,我们可以理解这个压缩包可能包含了...

    推荐20家国外的脚本下载网站

    3. **User Scripts**:这是一个专注于浏览器用户脚本的网站,例如 Greasemonkey 脚本,用于自定义网页行为和增强用户体验。 4. **Scripts**:这个网站集合了各种类型的脚本,包括开源和商业版本,方便开发者按需...

    firefox插件开发文档

    3. **Content Script与Browser API**: Firefox提供了两种类型的脚本:content scripts(内容脚本)运行在网页上下文中,可以直接操作DOM;browser APIs(浏览器API)提供了一组接口,允许扩展与浏览器本身进行交互,...

    tampermonkey:Tampermonkey插件

    这个插件允许用户编写或安装名为User Scripts的JavaScript代码,这些脚本能够在特定网页上运行,从而增强或修改网页的功能。在“豆瓣中图法分类.user.js”这个例子中,我们可以看到Tampermonkey插件的一个实际应用。...

    kondo

    近藤(BETA) 确定您的Javascript应用...完成后,在扩展名中按“停止”以结束录制并将Puppeteer脚本自动存储到本地userscripts.js文件中。 要运行现有脚本并分析页面内存泄漏,请运行: npm run script &lt;scriptName

    Cacti安装配置文档[收集].pdf

    3. 在Cacti管理界面中,选择"Data Input Methods",点击"Add",输入方法选择"script/command",填入脚本路径和参数。 通过以上步骤,Cacti能有效地监控网络设备的性能,提供实时图表和历史数据,帮助管理员识别网络...

    火狐浏览器插件开发头文件和示例

    火狐浏览器插件,也被称为Firefox扩展,是增强火狐功能和自定义用户浏览体验的一种方式。这些插件是基于开放标准和Web技术构建的,如JavaScript、HTML和CSS,使得开发者可以利用火狐的API来实现各种各样的功能。在...

    yahoo-auctions-batch-processing

    这使得用户在关闭浏览器后仍能保留一些信息,如已撤回的拍卖物品列表或自定义设置。 为了实现这些功能,开发者可能使用了各种JavaScript库和框架,如jQuery来简化DOM操作,Promise或async/await来处理异步操作,...

    nginx和tomcat整合.pdf

    # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} } } ``` 3. **配置解析** - **基本设置**:包括工作进程数、错误日志级别等。 - **HTTP块**:定义全局设置...

    Centos LNMP安装.pdf

    [root@ASANGE mysql-5.6.12]# scripts/mysql_install_db --user=mysql [root@ASANGE mysql-5.6.12]# chown -R root:mysql /usr/local/mysql/* [root@ASANGE mysql-5.6.12]# chown -R mysql:mysql /data/mysql/* ``` ...

    .htaccess

    It will also allow you to create scripts to notify you if there is an error (for example I use a PHP script on Free Webmaster Help to automatically e-mail me when a page is not found). 我要介绍的....

Global site tag (gtag.js) - Google Analytics