通过 Opera 的 URL 过滤 API 实现站点拦截

Opera 内置的拦截功能已经帮助用户很久了,随着 URL 过滤 API 的开放,开发者能开发出能更方便的拦截和控制拦截的扩展。接下来我们来看看 URL 过滤 API 是如何工作的,什么情况下它是有用的,教大家如何使用它。
-原理-
Opera 内置的拦截器通过过一个包含域名列表的文件来拦截,类似于操作系统里 hosts 文件的工作方式。这个文件即是 urlfilter.ini ,在用户配置文件夹里能找到,可以在浏览页面时右键选择“内容拦截”来添加拦截的内容。也可通过“菜单-设置-首选项-高级-内容-阻止的内容”来管理。 URL 过滤 API 允许扩展将域名临时添加到拦截器里。
-用途-
一些可能有用功能:

  • 按时拦截:如果你是微博控,可以让扩展在上班的时候拦截相关网站
  • 拦截页面内容:拦截页面上的广告
  • 一键拦截:点击按钮将当前访问的域名加入黑名单
  • 拦截定制:通过第三方列表拦截。

到这里你也许会有疑问,这些不都可以通过 Javascript 来实现吗?确实能够,但是通过这个 API 有以下两个好处:

  • 当拦截成百上千的站点时,用浏览器原生的功能能大大地提高效率
  • 通过一个简单的方法就能实现拦截,这使得代码简洁而易维护


-如何使用-
不说理论了,来点实际的吧。让我们来做一个非常简单的扩展,实现对新浪微博网站的拦截。
要使用 URL 过滤 API首先要在 config.xml 里声明它:

<feature name="opera:urlfilter"/>

我们知道扩展会通过 config.xml 来请求 index.html,建立它。这个扩展只需要调用一个脚本文件--background.js

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<script src="background.js"></script>
<title>URL 拦截</title>
</head>
<body>
</body>
</html>

现在我们来看 background.js 里如何写:

var sites = ['*://weibo.com/*', '*://*.weibo.com'];
var filter = opera.extension.urlfilter;

注意:星号(*)可作为通配符用在 URL 里的任意位置,例如 *:// 将会阻止任何协议的的页面包括 http 和 https 。

目前为止都很简单。URLFilter 对象包含了一个拦截列表和两个方法:add() 和 remove() 。我们这个例子需要通过遍历数组来添加站点:

for (var i = 0, len = sites.length; i < len; i++) {
filter.block.add(sites[i]);
}

最后,我们应该将上面的代码放到一个 API 自检的判断里

if (typeof opera.extension.urlfilter != 'undefined') {
...
}

就是这样了。下载这个扩展,或者用下面完整的代码自己建立一个扩展。注意,在安装扩展后最好清理一下浏览器缓存,否则有可能没有用哦。

config.xml

<?xml version="1.0" encoding="utf-8"?>
<widget xmlns="http://www.w3.org/ns/widgets" defaultlocale="zh-cn">
<name>URL Filter Example</name>
<description>拦截站点的例子</description>
<author href="http://blog.weixiaowei.net/">味小味</author>
<feature name="opera:urlfilter"/>
</widget>

index.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<script src="background.js"></script>
<title>URL 拦截</title>
</head>
<body>
</body>
</html>

background.js

// 检查 API 是否存在
if (typeof opera.extension.urlfilter != 'undefined') {
// 把要拦截的站点放进数组里
var sites = ['*://weibo.com/*', '*://*.weibo.com'];
// 把 URLFilter 对象赋给一个有意义的变量
var filter = opera.extension.urlfilter;
//通过遍历把站点添加到拦截列表里
for (var i = 0, len = sites.length; i < len; i++) {
filter.block.add(sites[i]);
}
}

很显然,这个例子还能进一步改进,例如允许用户自定义拦截站点,要实现则需要使用扩展的首选项功能。

-结语-
正如你看到的,URL 过滤 API 使用起来很简单,但是很强大。它是建立在 Opera 桌面浏览器里使用了很久的一个技术上,现在你可以建立你自己的接口使它变得更强大。值得提醒的是,Opera 的内容拦截并不是简单的隐藏--它是在下载页面时是就阻止了--用户不需要等待或者支付没看到的内容。
本文根据翻译改编而成,原文链接:http://dev.opera.com/articles/view/site-blocking-with-operas-url-filter-api

转载于:https://www.cnblogs.com/hebn/archive/2012/07/10/2584505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值