阅读:6806回复:11
使用Greasemonkey过滤网页内嵌JS脚本
Adblock对于网页内嵌的JS脚本无能为力,例如:
<script language="JavaScript"> <!-- Begin function popup() { window.open('http://www.taobao.com','',''); window.focus(); } // End --> </script> 比较简单的方法就是使用Greasemonkey,安装的方法不详述了,可以参考https://www.firefox.net.cn/dig/toc/,简单的步骤 到Firefox Add-ons官网 https://addons.mozilla.org,搜索Greasemonkey,点击安装。 安装后重启Firefox,点击菜单栏中的“工具”--> "Greasemonkey" --> "New User Script...",创建一个新的GM脚本,在"New User Script..."对话框中: Name: 给GM脚本取了名字,例如no_popup Namespace: 无所谓,随便写几个字符串,一般是GM脚本的下载地址 Description: 无所谓,说明一下这个GM脚本的用处 Includes: 指定在哪些网页运行这个GM脚本,可以使用通配符,例如允许所有网页就是*,如果允许sohu.com就是http://*.sohu.com/* Excludes: 指定不在哪些网页运行这个GM脚本,例如不在sina.com运行就是http://*.sina.com/* 点击OK后,进入GM脚本编辑,很简单只需要写入两行东西 unsafeWindow.popup = function () { var sorryMsg = "This souldn't appear because Greasemonkey can divide by zero."; }; 上面2行可以简单的理解为替代网页中原来的popup函数。 那么整个GM脚本看上去是这样的: // ==UserScript== // @name no_popup // @namespace localhost // @description Replace the popup() function // @include * // @exclude http://*.sina.com/* // ==/UserScript== unsafeWindow.popup = function () { var sorryMsg = "This souldn't appear because Greasemonkey can divide by zero."; }; 这样一些讨厌的网页内嵌JS脚本广告也可以被轻松的过滤。 |
|
1楼#
发布于:2011-12-30 12:19
使用document.addEventListener("beforescriptexecute", funtion,flase)可以在脚本执行前检查其内容。
|
|
2楼#
发布于:2011-12-30 12:19
|
|
|
3楼#
发布于:2011-12-30 12:19
dindog:popup的话,abp现在可以了。可以参考楼上在mozest写的: read-42578 效果实际来说并不理想,建议用 adblock plus pop-up addon,现在也加入过滤规则订阅功能。 |
|
|
4楼#
发布于:2011-12-30 12:19
fang5566: 怎么说呢?举个例子?除了会闪一瞬间外(真的是一瞬间,不过也可能同配置有关系,不过我的机器也是中低端了),都可以啊。。。难道是我去的网站不够邪恶? ![]() |
|
|
5楼#
发布于:2011-12-30 12:19
主要就是一闪,或者一弹后消失,相比之下用ABPPA效果更好一点。不过不介意的话 ABP也已经够用了呵呵。
|
|
|
6楼#
发布于:2011-12-30 12:19
闪一下总感觉不舒服,期待更完美点。
|
|
7楼#
发布于:2011-12-30 12:19
read-42578
帖子里面反映的那个网站就是白光一闪而过。 帖子里面也说明了原理,先是载入about:blank 也就是空白页面(白光来源),然后在发送接收请求之前,用ABP自己的拦截请求功能予以阻止,所以这个弹窗阻止功能还比较初级,利用的是FF自己拦截请求的功能实现,所以会有这个副作用。 更完美的功能不是无法实现,但ABP本身核心必须做出改进。 |
|
|
8楼#
发布于:2011-12-30 12:19
确实,在ABP中使用
!--- 以cba.com为主域名的所有页面,不得产生弹窗。 about:blank^$popup,domain=cba.com 这条规则很方便。 |
|
9楼#
发布于:2011-12-30 12:19
如果只是弹窗,这个脚本更好用:
// ==UserScript== // @name blockPopupWindow // @description 阻止弹窗 // @include http* // @author zbinlin // @version 0.0.2 // @run-at document-start // ==/UserScript== document.addEventListener("beforescriptexecute", function (e) { document.removeEventListener("beforescriptexecute", arguments.callee, false); var win = window.wrappedJSObject; win.Fopen = win.open; win.open = function () { var args = Array.slice(arguments); var domains = document.domain.split("."); switch (domains.length){ case 4: domaind=domains[domains.length-3]+"."+domains[domains.length-2]+"."+domains[domains.length-1]; break; case 3: domaind=domains[domains.length-2]+"."+domains[domains.length-1]; break; default: domaind=document.domain; } var result = args[0][0] == "\/" || args[0].match(/^(http(s)?:\/\/)?[^/]*/)[0].indexOf(domaind) != -1; if (result) { return win.Fopen.apply(this, args); } return null; }; }, false); |
|
10楼#
发布于:2011-12-30 12:19
标题跟内容有出入,标题应该改成弹窗。。
现在还没有很好阻挡小窗口的办法。 |
|
11楼#
发布于:2011-12-30 12:19
能挡所有<script>标签吗……
|
|
|