风飘林's Blog

风过留声|水过留痕|足过留迹

『Firefox 扩展』TrayHotKey

扩展名:TrayHotKey

功能:添加一个系统热键(老板键)用来显示或隐藏窗口;可修改窗口的不透明度。

支持:Firefox4b8-*

已知 Bug:scale 元素的显示有点问题。原因未知,猜想可能是 Firefox4 本身的 Bug。但该 Bug 不影响正常使用。Fx4b11 已修复

下载地址:TrayHotKey

最新稳定版…

更多……


『NodeJS』DNS Proxy

DNS Proxy

主要功能:解决 DNS 污染及使用其他 DNS 时导致访问使用 cdn 技术的网站过慢问题

原理:通过白名单(dnsWhiteList.domains)控制受 DNS 污染的域名正常解析(使用 tcp 协议进行查询,可以防止 DNS 污染)、通过黑名单(dnsBlackList.domains)控制使用了 cdn 技术的网站直接使用 ISP 的 DNS 服务器进行查询。

使用方法:

  1. 下载 Node.jsDNS Proxy,新建一个 DNS Proxy 目录(如 D:\DNS Proxy),把下载回来的 node.exe 及 tip.zip 压缩包内的 config.jsondns.jsserver.js 放到 DNS Proxy 目录下。
  2. 获取ISP 提供的 DNS 服务器。首先确保没有修改过 DNS 服务器设置。
    如果是直接使用操作系统的 PPPoE 虚拟拨号的,点击“开始”->“运行,在“运行”窗口在输入“cmd”打开“命令提示符窗口”。输入“ipconfig /all”回车后就可以找到 DNS 服务器了,一般在带有“宽带连接”的适配器下的“DNS Server”(或者“DNS 服务器”)中,如下图所示:
    宽带连接的DNS 服务器
    如果是使用路由器来拨号的,可以在路由器的管理界面里查看。进入管理界面的方式可查看路由器的说明书,以下是 TP-Link 的管理界面中关于 DNS 服务器的截图:
    路由器中的DNS 服务器

  3. 获取支持 TCP 协议的 DNS 服务器。
    目前我所知道的支持 TCP 协议的 DNS 服务器有 Google public DNS 及 OpenDNS。其中 Google public DNS 的速度在我这比较快,所以 DNS Proxy 脚本默认的是 Google public DNS 的“8.8.8.8”。如果你有更好的 DNS 服务器,也可以替换掉“8.8.8.8”。
  4. 修改本地 DNS服务器设置。
    找到 DNS 服务器地址后,我们需要修改 DNS 服务器设置。
    打开“控制面板”->“网络连接”(windows 7 是“网络和共享中心”->“更改适配器设置”),双击“本地连接”(直接拨号上网的是“宽带连接”)适配器打开“本地连接 状态”窗口。找到“Internet 协议版本 4(TCP/IPv4)”并双击打开“Internet 协议版本 4(TCP/IPv4) 属性”窗口,选中“使用下面的 DNS 服务器地址(E):”,在“首先 DNS 服务器(P):”里填入“127.0.0.1”、“备用 DNS 服务器(A):”里填入第一步获取的 DNS 服务器,如“202.96.128.86”,确定并关闭窗口后即可。
    DNS 服务器设置
  5. 下面我将说下 config.json 的结构,以及如何修改 config.json。
    config.json 是标准的 JSON 格式,所以在修改时需要严格遵循 JSON 格式 的要求,否则将会无法读取配置。
    config.json 内有两个属性对象,分别是 dnsWhiteListdnsBlackList,其中 dnsWhiteList 控制 DNS 查询使用 TCP 协议,dnsBlackList 与一般的 DNS 查询一样。这两个属性对象都有 hostportdomains 属性。
    host 属性定义 DNS 服务器地址,port 属性定义 DNS 服务器端口(一般为 53),domains 属性是一个数组,可以通过添加域名(元素)来控制该域名是使用何种 DNS 服务器来查询的。如默认配置中在 dnsWhiteList 对象的 domains 数组属性中就包含了“twitter.com”元素,这表明域名 twiter.com 将使用 dnsWhiteList 的 DNS 服务器 8.8.8.8:53 来查询 ip 地址。同理,如果你想使用 dnsBlackList 的 DNS 服务器查询域名,可以在 dnsBlackList 的 domains 数组内添加域名。注:domains 数组的元素为字符串,以英文的逗号分开,元素可以支持通配符“*”、“?”跟正则表达式。
    在这里需要修改下 host 属性。将 dnsWhiteList 的host 属性值修改支持 TCP 协议的DNS 服务器(当然,这里也可以不用修改,如果没有找到比 8.8.8.8 更好的)。将 dnsBlackList 的 host 属性值“202.96.128.86”改成在第一步中获取的 ISP 的 DNS 服务器。
  6. 启动 DNS Proxy 脚本。
    打开“命令提示符”,切换到 node.exe 所在的目录(如:cd d:\DNS Proxy),输入以下命令: node dns.js。启动后可以使用 nslookup 来查询是否可用了。在“命令提示符”窗口中输入命令“nslookup twitter.com”,如果返回的是以“199.59”开头的ip地址,说明脚本已经生效了。
    nslookup

『CSS』faviconContextMenu.uc.xul 的 CSS 实现

功能:在地址栏左边的站点图标右键菜单中添加几个实用的菜单项。

来源:本脚本根据 mozest 论坛用户“ithinc”的 faviconContextMenu XUL 脚本并作出一些修改

安装方法:与一般的 CSS 样式的使用方法一致。

#page-proxy-stack {
    -moz-binding: url("data:text/xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+Cgo8YmluZGluZ3MgeG1sbnM9Imh0dHA6Ly93d3cubW96aWxsYS5vcmcveGJsIgogICAgICAgICAgeG1sbnM6eGJsPSJodHRwOi8vd3d3Lm1vemlsbGEub3JnL3hibCIKICAgICAgICAgIHhtbG5zOnh1bD0iaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9rZXltYXN0ZXIvZ2F0ZWtlZXBlci90aGVyZS5pcy5vbmx5Lnh1bCI+CiAgICA8YmluZGluZyBpZD0icGFnZS1wcm94eS1wbHVnIj4KICAgICAgICA8Y29udGVudCBjb250ZXh0PSJfY2hpbGQiPgogICAgICAgICAgICA8eHVsOm1lbnVwb3B1cD4KICAgICAgICAgICAgICAgIDx4dWw6bWVudWl0ZW0gbGFiZWw9IiYjMjgxNjU7JiMzMTM1NDsmIzIyMzIwOyYjMjIzMzY7JiMyNjYzOTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubW91c2Vkb3duPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jbGljaz0iZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY29tbWFuZD0idGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuZG8oJ2NsZWFyX3VybCcpOyIgLz4KICAgICAgICAgICAgICAgIDx4dWw6bWVudWl0ZW0gbGFiZWw9IiYjMjI3OTc7JiMyMTA0NjsmIzI0NDAzOyYjMjEwNjk7JiMyNjYzMTsmIzMxNjE0OyYjMzkwMjk7JiMyMjMyMDsmIzIyMzM2OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZWRvd249ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jb21tYW5kPSJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5kbygnY29weV91cmwnKTsiIC8+CiAgICAgICAgICAgICAgICA8eHVsOm1lbnVpdGVtIGxhYmVsPSImIzMxODk2OyYjMzYxNDg7JiMyNDE4MjsmIzIyMzEyOyYjMjQ0MDM7JiMyMTA2OTsmIzI2NjMxOyYjMzE2MTQ7JiMzOTAyOTsmIzI1MTcxOyYjMjQzMjA7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbm1vdXNlZG93bj0iZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNvbW1hbmQ9InRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLmRvKCdwYXN0ZWFuZGdvX3VybF9jdXJyZW50Jyk7IiAvPgogICAgICAgICAgICAgICAgPHh1bDptZW51aXRlbSBsYWJlbD0iJiMzMTg5NjsmIzM2MTQ4OyYjMjQxODI7JiMyMjMxMjsmIzI2MDMyOyYjMjY2MzE7JiMzMTYxNDsmIzM5MDI5OyYjMjUxNzE7JiMyNDMyMDsmIzY1Mjg4OyYjMjEwNjk7JiMyMTQ4ODsmIzY1Mjg5OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZWRvd249ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jb21tYW5kPSJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5kbygncGFzdGVhbmRnb191cmxfdGFiX2ZvcmVncm91bmQnKTsiIC8+CiAgICAgICAgICAgICAgICA8eHVsOm1lbnVpdGVtIGxhYmVsPSImIzMxODk2OyYjMzYxNDg7JiMyNDE4MjsmIzIyMzEyOyYjMjYwMzI7JiMyNjYzMTsmIzMxNjE0OyYjMzkwMjk7JiMyNTE3MTsmIzI0MzIwOyYjNjUyODg7JiMyMTUxODsmIzIxNDg4OyYjNjUyODk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbm1vdXNlZG93bj0iZXZlbnQucHJldmVudERlZmF1bHQoKTtldmVudC5zdG9wUHJvcGFnYXRpb24oKTsiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uY2xpY2s9ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNvbW1hbmQ9InRoaXMucGFyZW50Tm9kZS5wYXJlbnROb2RlLmRvKCdwYXN0ZWFuZGdvX3VybF90YWJfYmFja2dyb3VuZCcpOyIgLz4KICAgICAgICAgICAgICAgIDx4dWw6bWVudXNlcGFyYXRvciAvPgogICAgICAgICAgICAgICAgPHh1bDptZW51aXRlbSBsYWJlbD0iJiMyMjc5NzsmIzIxMDQ2OyYjMzE0NDk7JiMyODg1NzsmIzIyMjcwOyYjMjY2MzE7JiMyMjMyMDsmIzIyMzM2OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZWRvd249ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jb21tYW5kPSJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5kbygnY29weV9mYXZpY29uX3VybCcpOyIgLz4KICAgICAgICAgICAgICAgIDx4dWw6bWVudWl0ZW0gbGFiZWw9IiYjMjI3OTc7JiMyMTA0NjsmIzMxNDQ5OyYjMjg4NTc7JiMyMjI3MDsmIzI2NjMxOyYjNjUyODg7YmFzZTY0ICYjMzI1MzQ7JiMzMDcyMTsmIzY1Mjg5OyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZWRvd249ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jb21tYW5kPSJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5kbygnY29weV9mYXZpY29uX2Jhc2U2NCcpOyIgLz4KICAgICAgICAgICAgICAgIDx4dWw6bWVudWl0ZW0gbGFiZWw9IiYjMjA0NDU7JiMyMzM4NDsmIzMxNDQ5OyYjMjg4NTc7JiMyMjI3MDsmIzI2NjMxOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25tb3VzZWRvd249ImV2ZW50LnByZXZlbnREZWZhdWx0KCk7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmNsaWNrPSJldmVudC5wcmV2ZW50RGVmYXVsdCgpO2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25jb21tYW5kPSJ0aGlzLnBhcmVudE5vZGUucGFyZW50Tm9kZS5kbygnc2F2ZV9mYXZpY29uJyk7IiAvPgogICAgICAgICAgICA8L3h1bDptZW51cG9wdXA+CiAgICAgICAgICAgIDxjaGlsZHJlbiAvPgogICAgICAgIDwvY29udGVudD4KICAgICAgICA8aW1wbGVtZW50YXRpb24+CiAgICAgICAgICAgIDxtZXRob2QgbmFtZT0iZG8iPgogICAgICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJjb21tYW5kIiAvPgogICAgICAgICAgICAgICAgPGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPCFbQ0RBVEFbCiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY2xlYXJfdXJsJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdVUkxCYXIudmFsdWUgPSAiIikgfHwgZ1VSTEJhci5mb2N1cygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29weV91cmwnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVG9DbGlwYm9hcmQoZ0Jyb3dzZXIuY3VycmVudFVSSS5zcGVjKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3RlYW5kZ29fdXJsX2N1cnJlbnQnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuVUlMaW5rSW4ocmVhZEZyb21DbGlwYm9hcmQoKSwgImN1cnJlbnQiLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3RlYW5kZ29fdXJsX3RhYl9mb3JlZ3JvdW5kJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblVJTGlua0luKHJlYWRGcm9tQ2xpcGJvYXJkKCksICJ0YWIiLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Bhc3RlYW5kZ29fdXJsX3RhYl9iYWNrZ3JvdW5kJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ0Jyb3dzZXIubG9hZE9uZVRhYihyZWFkRnJvbUNsaXBib2FyZCgpLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvcHlfZmF2aWNvbl91cmwnIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndyaXRlVG9DbGlwYm9hcmQoZ1Byb3h5RmF2SWNvbi5zcmMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY29weV9mYXZpY29uX2Jhc2U2NCcgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9CYXNlNjQoZ1Byb3h5RmF2SWNvbi5zcmMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2F2ZV9mYXZpY29uJyA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlblVJTGlua0luKGdQcm94eUZhdkljb24uc3JjLCAic2F2ZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgXV0+CiAgICAgICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIDwvbWV0aG9kPgogICAgICAgICAgICA8bWV0aG9kIG5hbWU9IndyaXRlVG9DbGlwYm9hcmQiPgogICAgICAgICAgICAgICAgPHBhcmFtZXRlciBuYW1lPSJzdHJpbmciIC8+CiAgICAgICAgICAgICAgICA8Ym9keT4KICAgICAgICAgICAgICAgICAgICA8IVtDREFUQVsKICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cy5jbGFzc2VzWyJAbW96aWxsYS5vcmcvd2lkZ2V0L2NsaXBib2FyZGhlbHBlcjsxIl0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRTZXJ2aWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lDbGlwYm9hcmRIZWxwZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29weVN0cmluZyhzdHJpbmcpOwogICAgICAgICAgICAgICAgICAgIF1dPgogICAgICAgICAgICAgICAgPC9ib2R5PgogICAgICAgICAgICA8L21ldGhvZD4KICAgICAgICAgICAgPG1ldGhvZCBuYW1lPSJ0b0Jhc2U2NCI+CiAgICAgICAgICAgICAgICA8cGFyYW1ldGVyIG5hbWU9Imljb24iIC8+CiAgICAgICAgICAgICAgICA8Ym9keT4KICAgICAgICAgICAgICAgICAgICA8IVtDREFUQVsKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTlNVUkkgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWcgPSBuZXcgSW1hZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5uYXR1cmFsV2lkdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5uYXR1cmFsSGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOU1VSSSwgImNhbnZhcyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZSh0aGlzLCAwLCAwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQud3JpdGVUb0NsaXBib2FyZChjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50cy51dGlscy5yZXBvcnRFcnJvcigiQ291bnQgbm90IGxvYWQ6ICIgKyBpY29uKTsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGljb247CiAgICAgICAgICAgICAgICAgICAgXV0+CiAgICAgICAgICAgICAgICA8L2JvZHk+CiAgICAgICAgICAgIDwvbWV0aG9kPgogICAgICAgIDwvaW1wbGVtZW50YXRpb24+CiAgICA8L2JpbmRpbmc+CjwvYmluZGluZ3M+#page-proxy-plug");
}

FaviconContextMenu

PS:由于使在 stylish 上安装的方便,将 xbl 文件进行了 base64 编码,这里将提供 xbl 文件下载:pageProxyStack.xml

PS:由于 css 样式也会存在安全风险,如果你无法确定 css 样式是否可信,请不要随意安装 css 样式


『NodeJS』简单的 HTTP 服务器实现

hg clone https://bitbucket.org/zbinlin/nodejs

『NodeJS』简单的本地 DNS 代理脚本

var dgram = require("dgram");
 
const DNSADDRESS = "8.8.8.8";
const DNSPORT = "53";
 
console.log("DNS Server: " + DNSADDRESS + ":" + DNSPORT);
 
dgram.createSocket("udp4", function (msg, rinfo) {
    var server = this;
    var client = dgram.createSocket("udp4");
    var address = rinfo.address;
    var port = rinfo.port;
    client.send(msg, 0, msg.length, DNSPORT, DNSADDRESS);
    var tid = 0, buf = null;
    client.on("message", function (msg, rinfo) {
        buf = msg;
        if (tid) clearTimeout(tid);
        tid = setTimeout(function () {
            tid = 0;
            server.send(buf, 0, buf.length, port, address);
            client.close();
        }, 15);
    });
}).bind(53, "127.0.0.1");

『Firefox 扩展』FireRun 测试版

  扩展:FireRun

 兼容性:Firefox 8+

  功能:提供便捷地运行代码片段及调用外部程序的功能。目前版本为测试版,欢迎大家测试反馈!

下载地址:FireRun 0.0.1

下载地址:FireRun 0.0.2

  1. 0.0.1 [添加] 初始版本
  2. 0.0.2 [修复] firefox 8 外部调用失效
  3. 0.0.2 [添加] 外部调用可直接打开文件夹
  4. 0.0.3 [添加] firerun:// 协议支持
  5. 0.0.3 [修改] 调整工具栏按钮的菜单项位置
  6. 0.0.3 [添加] 提交至 AMO

更多……


『文档』bootstrapped extensions 开发杂记:添加工具栏按钮

  在传统的扩展开发中,如果要添加一个工具栏按钮(以下简称按钮)是非常容易的事情,直接在 xul 中添加一个按钮元素(toolbarbutton)即可。但在 bootstrapped extensions 开发中,由于无法直接 overlay xul 文件(到 Firefox 9.0 为止还不支持 overlay),所以只能通过 js 来新建按钮。

更多……


『userChromeJS』copy image data uri

 文件名:copyImageDataURI@zbinlin.uc.js

  功能:右键添加“复制图像(Base64)”

下载地址:最新版

  1. 0.0.1 [添加] 初始化
hg clone https://bitbucket.org/zbinlin/copy-image-data-uri-base64-encode

『userChromeJS』Trim RAM on minimize(最小化时整理内存)

 文件名:trimOnMinimize@zbinlin.uc.js

  功能:在最小化时整理物理内存(Only Windows)

下载地址:最新版

  1. 0.0.1 [添加] 初始化
  2. 0.0.2 [添加] 另两种触发整理内存的方式
hg clone https://bitbucket.org/zbinlin/trimonminimize

PS: 如果不在意 FF 的内存占用,不建议使用该脚本!

注:本脚本的功能已集成到 TrayHotKey 0.3.5 了。


『userChromeJS』默认启用查找栏“全部高亮显示”按钮

在 Firefox 的查找栏有个“全部高亮显示”按钮,但默认并没有开启,如果每次查找都要点一下该按钮,则显示有些麻烦。
本脚本可以在打开查找栏时自动开启“全部高亮显示”按钮,这样就不用每次手动去开启了。

下载地址:最新版

  1. 0.0.1 [添加] 初始化
hg clone https://bitbucket.org/zbinlin/enablefindbarhighlight

『UCJS + UserJS』禁止载入网页后自动聚焦到输入框

userChromeJS 脚本

下载地址:最新版

  1. 0.0.4 [添加] 禁止 textarea 元素自动聚焦(同时还可以直接添加其他元素禁止自动聚焦)
  2. 0.0.3 [修复] 禁止使用 select 方法聚焦到输入框
  3. 0.0.2 [更改] 监控标签载入方式
  4. 0.0.1 [添加] 初始化
hg clone https://bitbucket.org/zbinlin/disabledfocus

 

userJS 脚本(仅适用于 scriptish)

下载地址:最新版

  1. 0.0.1 [添加] 初始化(将 UC 脚本改成 User 脚本)
hg clone https://bitbucket.org/zbinlin/disabledautofocus

 

PS: 有些输入框使用 HTML5 的新增属性 autofocus 来自动聚焦到输入框的,会发现本脚本失效了,这时可以通过修改 about:config 的 browser.autofocus,将其值改为 false 即可。