情定今生 发表于 2012-11-18 23:36

masontxt

本帖最后由 情定今生 于 2015-3-10 18:57 编辑




==============推荐的准备工作==============
A. 正则表达式。所有的规则都分为判断条件和Function两部分,判断条件中的URI和content type都使用了正则表达式。关于正则表达式的教程这边没什么好说的(因为我也是初学者),网上铺天盖地的都是。值得注意的是,请不要忘记把网址中的"."(小数点)前面加上"\"(反斜线),因为正则中的小数点是特殊字符,代表的是任意一个字符,为了不必要的麻烦,最好还是加上"\"(反斜线)防止误触发。
B. HTTP头信息定义的基础。这个扩展的大部分功能都是通过修改http头信息达成效果。这个是W3C的标准定义,基本包括了所有能见到的头信息。
http://www.w3.org/Protocols/rfc2616/rfc2616.html
这个是中文的教程,可以随便看看。
http://www.iwms.net/n2030c40.aspx

C. 扩展Live HTTP Headers
https://addons.mozilla.org/zh-CN/firefox/addon/3829
强力推荐这个FF扩展,可以实时显示FF的所有http连接的头信息。相当相当好用。而如果看不到头信息,基本上是很难使用本扩展。

==============初级使用指南分割线===================
1. make it downloadable(能下载)。
可以让指定的文件正确提示下载框(部分无效)。没有人知道所谓的无效部分,FF是怎么判断的。有兴趣的同学可以试试看建立个规则,让一切链接都"make it downloadable"看看是什么效果 。
这个function修改的是content-disposition域(和Force Content-Type 不一样),FF根据这个信息来判断是否提示下载文件,以及下载文件的默认文件名。
扩展中定义的默认文件名取自于原来的content-disposition域或者链接中的文件名。
有的同学在使用这个功能的时候,发现会有多余的txt扩展名,很难说是原来的content-disposition里面就有,还是FF自作主张根据MIME Type加上的。

2. change content type(修改Content Type)。
和force content-type完全一样,修改content-type域。
FF根据content-type域以及文件扩展名判断下载时的动作,比如使用什么关联程序打开。这个动作的管理都在FF的options菜单的 application tab里面,由于不知名的原因,FF没有开放直接追加删除的功能,只能到profile\mimeTypes.rdf里手动修改。
但是,即使设定的MIME-Type和content type一致,也未必有效。原因未明。
有的同学如果希望能直接使用关联torrent文件,可以用这个function改成想要的content-type,然后再设置相应的MIME-Type。RP够好的话,就可以用了。

这里有个问题,这个function对于缓存文件(cache)无效!
有兴趣的同学,可以对以下URI修改content-type为"image/x-icon"试试看
http://www.baidu.com/favicon.ico

3. referrer to host root(反-防盗链(一般))
referrer to specified site(反-防盗链(自定义))

和Ref Control一样,修改referrer域
两个function的区别在于,前者会自动指向uri的根路径,后者需要手动指定url。

4. fake IE6(伪装成IE6)
顾名思义,让某些网站误认为浏览器是ie6。
修改user-agent域。单独用的话.....基本上只能用来做实验。

5. block request, redirect request(阻止和重定向)
没什么好说的,和他们本身的描述一样,
如果需要更加复杂的重定向,请参考高级使用指南的Mason复合脚本部分。

==============中级使用指南分割线===============
恭喜各位同学已经看完了上面无聊的初级使用指南,没有插图,没有例子,要么觉得太简单,要么觉得是天书
没办法,上面的都是最简单的应用。从现在开始才是各位同学期待已久的同步本地下载!!!


6. download locally when watching(同步本地下载)
这个function的主要用来下载任意文件,各位同学可能更加关心多媒体文件,如flv,mp3的下载。
废话不多说,下面给个例子,建立规则下载yobo的mp3文件。
测试地址
http://yobo.com/song/home/321752

a. 清空cache
b. 关闭一切没有用的FF窗口,避免干扰
c. 打开上述网页(请确保没有禁止javascript脚本)
d. 开Live HTTP header监视http头信息
e. 点"青花瓷"的开始播放按钮
f. mp3声音响起,Live HTTP header的窗口开始滚动
g. 把Live HTTP header的Capture复选框取消,让它停止监视
h. 研究刚才截取的信息


请注意蓝色的那行字,这个就是mp3文件的地址。
这里肯定有同学问,怎么才能确定这行是真实地址?
回答是,"猜"。首先文件名有mp3的字样,然后,返回的Content-Type是audio/mpeg而且文件大小也差不多。所以就拿这个作为真实地址了。

i. 下载以上地址的文件,验证正确性
j. 根据刚才的真实地址推广正则表达式,这一步就是各位同学发散思维,集思广益,各有所长了。 我猜出来的正则是

    http://222.168.102.82/.*\.mp3

,原则是"尽量精确,能用就行,大胆猜想,小心验证"

这里有3个小提示:
// 大多数网站是一进入网页,就开始缓存。那么Live HTTP header必须在此之前就要开始监视,因为HTTP 头只存在于文件请求的第一次交互中。晚了就抓不到了。
// youku的视频都是7分钟左右分段的,无解。
// Live HTTP header的文本可以复制或者另存成文本文件,请活用find功能。

最后可能有的同学还有一个疑问,"既然地址已经知道了,为什么不用一般的多线程下载工具(迅雷,快车,旋风),还要用这个扩展去建立规则进行同步下载呢?"。
回答: 由于网站的反下载设定,可能会出现能正常在线观看收听,下载工具却不能正确下载的现象,而这个同步下载function就不会有这样的顾虑。

==============高级使用指南分割线===============
对于大多数同学来说,请无视以下的内容,因为使用这些function就要手工写代码了。
很强大,但是很辛苦。

7. Mason Script(脚本)
在任意文件最前方插入自定义代码。在0.3.6以后的版本中,脚本也可以使用其他类型的规则。

这个function不同于GM等页面修改扩展,不同点在于:
后者在网页载入后生效,无法影响某些没有页面的交互以及在document的load之前就实行的脚本代码。
而前者不基于DOM解析,直接修改文件本身,更加暴力。但是与此同时,对缓存文件(Cache)无能为力,因此请第一次使用之前务必清空缓存。

A. 脚本文件的安装,与规则的建立有2种方法。

1. 创建新规则,选定”insert mason script”,输入适当的描述和URL等限定条件,并且在Config窗口选择希望使用的脚本文件。保存。

2. 选择Import按钮中的”install mason script”, 并且选择希望使用的脚本文件,保存。
方法1中的脚本文件不会被复制到其他地方,脚本文件可以不包含”描述部分”。
方法2中的脚本文件会被复制到profile\mason文件夹,原始文件可以删除也可以保留,脚本文件必须包含”描述部分”。

B. 脚本文件的基本结构

脚本文件是大小写敏感的ANSI文本文件,推荐使用.mason.js作为扩展名,文件分为2个部分: 描述部分,代码部分,范例可以参考扩展的builtin-script文件夹的脚本文件。

a. 描述部分
描述部分是用来安装脚本文件时作为参考的一段文字,它以<mason>开始,以</mason>结束。
每项描述以及开始的<mason>,终了的</mason>标签必须独立分行。描述的项目数量不限。
基本格式为”描述=内容”,如:

author=tiramn

一个典型的描述部分像下面这个样子:

   1. <mason>
   2. Charset=gb2312
   3. Author=tiramn
   4. Created=2009/06/15
   5. Updated=
   6. Version=1.00
   7. Website=http://log.sociz.org/tiramn/
   8. Comment=这是一个描述部分的例子
   9. Description=这是一个描述部分的例子的描述
10. Usage=请安装Mason扩展之后,拖曳到窗口安装脚本
11. Url=google\.com
12. </mason>

其中描述部分必须包含以下2个描述。
description, url这2项描述将被作为规则的一部分进行安装。
如果缺少他们,规则可能无法正常安装和使用。
PS. 这些描述只在安装时生效,之后需要修改规则时,可以直接修改规则本身。

此外如果需要在描述部分使用中文,请务必加上Charset=gb2312的叙述。

b. 代码部分

1. 单脚本格式: 代码部分的所有内容都会被插入到指定的文件最前段。

2. 复合脚本格式: 分为区段描述部分和代码区段部分。一个典型的复合脚本象下面这个样子:

   1. <parts>
   2. part1=google\.com/search[^#]*$
   3. part2=#@@@L3
   4. </parts>
   5. <part1>
   6. var _myloc = location.href.hash;
   7. </part1>
   8. <part2>
   9. function _masonRedirect(spec){
10. return spec.replace(”#”, “search?”);
11. }
12. </part2>

首先从<parts>到</parts>的部分就是区段描述部分,中间每行都对之后出现的代码区段进行了定义。

格式为”代码区段关键字”=”应用的url的正则表达式”@@@FCD。

如果省略@@@FCD的话,则表示代码区段部分是用来直接插入的(如part1区段)。

如果包含@@@FCD的话,则表示代码区段部分是对应规则的补完(如part2区段)。请注意,即使使用的FCD不需要补全内容,也必须保留对应的代码区段部分。

FCD是Mason 用来描述规则类型的代码。通常为2位字符。

    * 目前可以在脚本中使用以下FCD
    * "R1″ Referrer to host root
    * "R2″ Referrer to specifed site (需要补全refer网址)
    * "C2″ Set Cookie (需要补全cookie内容)
    * "UE" Fake IE6
    * "L1″ block request
    * "L3″ redirect request(需要补全脚本代码,必须定义名为_masonRedirect的函数,参数spec是原地址,返回值是重定向后的地址)


C. 脚本的一些提示
1.Gecko的,html的加载, Javascript的加载都遵循从上而下的原则,
因此脚本中的代码必定早于原始文件的加载。
而每个html中引用的外部js文件必定晚于它本身的script标签之前的代码,
早于它本身的script标签之后的代码。
因此脚本文件可以选择适当的文件,适当的时机进行重载插入。

2.Gecko的,html加载会忽略连续打开的相同标签的后者,一直到这个标签关闭为止。
所谓"先到先得"(First come first serve)
重载插入html文件的脚本可以
<html><head><script>作为开始,</script>作为结束,
这样做可以让脚本中的js代码作为DOM的head部分的第一个元素,这样才能直接访问到DOM的各个对象。

3. 重载插入JS文件的脚本本身就是一个JS脚本。这点和gm很相似。
但是由于Hint1的缘故,请注意执行脚本的位置!
DOM并未完全加载结束,所以脚本当时无法访问在它之后由html或者其他js生成的dom对象!(这和gm很不同)
那么.....如果希望能访问到所有dom对象,怎么办?
使用window.addEventListener("DOMContentLoaded", 你的函数, false)
可以简单地使Mason脚本等同于gm脚本

4. 防范于未然式的Mason脚本
当我们需要改变网页中某些已经存在的js控制脚本,gm的思维方式是"消除之前的影响,改变,重新运行"的三部曲,
Mason则只需要"改变"这一步,在合适的地方加入合适的代码,或者在合适的时机执行合适的代码,
才是写Mason脚本最需要努力的。
那么如果找不到合适的代码插入点,怎么办?
可以重载document的方法,可以预先定义get, set方法,甚至于可以给Object对象加上自己想用的方法。

==============谢谢观赏===============

zczcmlml 发表于 2012-11-19 08:45

替身谁都可以做,只是只有第一个能刮胡子。。。 做出来的替身都是第一个人的摸样。

阿修羅之怒 发表于 2012-11-19 10:22

有個防蜂帽有100%耐久度 可以抵擋蜜蜂攻擊
其他帽子好像只是裝飾品 沒發現任何作用

绝望的看着 发表于 2012-11-19 18:04

我还找到蜜蜂的刺
页: [1]
查看完整版本: masontxt