我想为浏览器实现一个扩展来阻止第三方弹出广告,就像广告拦截器一样。但我不知道从哪里开始。有人可以向我指出一些参考资料,我可以使用这些参考资料来了解有关过滤 Web 内容的更多信息吗?提前致谢。
2 回答
对于谷歌浏览器,广告拦截的基础是chrome.webRequest
API,它将提供有关正在进行的网络请求的扩展信息,并允许它拦截或修改正在进行的请求。
我讨厌把你推到你可能已经找到的链接,但你真正需要的一切都在这里:
http://developer.chrome.com/extensions/index.html
如果您花时间阅读它,您将了解扩展程序是如何构建并存在于浏览器中的。如果你阅读足够长的时间,你会发现这个部分:
http://developer.chrome.com/extensions/content_scripts.html
其中详细说明了如何将 javascript 注入选项卡并在页面上下文与插件上下文的情况下运行它。
这些资源相当详细,您只需阅读它们即可。
要跟进您的评论,不。每个浏览器环境的架构都不同,即使目标相同,您也可能不得不对同一个问题采取不同的方法。
在我看来,有两种方法可以做到这一点(在高层次上)。阻止传输甚至发生,或在页面加载后追溯删除页面中的元素。
如果您停止传输,那会更好,因为它应该可以防止大量的偷渡式攻击,因为字节永远不会到达计算机,或者至少不会到达页面。
正如duskwuff 解释的那样,chrome 有一个API,可以让您拦截请求并在当时做出决定。IE 将有一个与 chrome 完全不同的 api,而 firefox 则不同于两者。
采用追溯方法,您可能会构建一些针对页面运行并删除广告的 x 平台 javascript。如果您可以在所有浏览器的选项卡中找到注入/执行此脚本的独特方法,这将“跨浏览器”工作,但该部分的实现将是平台独有的。
不同的浏览器甚至使用不同的语言。
Chrome 对大多数扩展使用 JS/HTML5,您可以明显地使用本机 DLL,但是当您将扩展提交到商店时,您会受到更严格的审查,因为需要审查二进制文件,因为它不会暴露浏览器的问题,因为 html/ Node.js 版本位于沙箱内,可以适当隔离。
Firefox 在过去的一段时间里发生了很大的变化,我没有跟上他们的变化,但这是一个完全不同的球赛。他们的扩展框架在某一时刻已经足够成熟,可以构建小型独立应用程序 iirc,但我可能错了。
IE 主要是 COM 扩展,它可能在最近一段时间内发生了一些变化,但您可能会制作与浏览器的 COM 接口互操作的 .NET 或 C++ .dll。
所以你可以看到每个浏览器都有很大的不同,然后就是所有的异常值(Safari / Opera / 等等......)
我们不要忘记很多这些浏览器也是跨平台的,根据您如何解决问题,您可能必须考虑到这一点。
还值得注意的是:Chrome 是一个异步模型,每个选项卡/插件彼此“隔离”,并且基本上使用异步消息进行通信。这使得使用浏览器的一般方法与其他浏览器根本不同,因为您需要在回调方法中工作很多。