白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
阅读:4604回复:18

[ABP]请教一些CSS语法的新手问题~

楼主#
更多 发布于:2012-02-28 12:07
0.ABP的元素隐藏并不会阻止内容下载,比如一个div中有个<a>包含的图片广告,隐藏了之后图片还是会下载,占用流量和带宽
但是我发现有的情况下,这种包含图片或者其他多媒体的容器,如果隐藏了它的某个父容器,就会不但隐藏还能阻止下载,看html结构的话,隐藏之后里面就没有东西了;而有的容器隐藏了之后里面的多媒体该下载还是要下载,这是为什么呢?


1. 请问CSS选择器有没有什么类似零宽断言之类的东西吗,比如
……
<parent>
   <div>xx</div>
   很多<div>
   <div>
        <center>想屏蔽的东西</center>
   </div>
</parent>

这些div都没什么可供标示的属性,但是子元素却有特点,比如这个想屏蔽的div下有且仅有一个子元素,所以我想选择“有且仅有一个<center>子元素的div”,可是用parent > div > center:only-child  选择的却是<center>, 有办法通过子元素的特点选择父元素吗?

这个问题是接第0个问题的,因为我想尝试把不影响浏览的顶级容器给隐藏掉,而不是下面的某个元素,这样隐藏之后说不定还能阻止下载,而且也不会留下空白
-いたんですか? -ええ、ずっと
dindog
千年狐狸
千年狐狸
  • UID30818
  • 注册日期2009-10-24
  • 最后登录2023-02-03
  • 发帖数1195
  • 经验59枚
  • 威望0点
  • 贡献值26点
  • 好评度10点
1楼#
发布于:2012-02-28 12:07
不行。要到css4才有,但目前无任何浏览器实现。
http://www.w3.org/TR/selectors4/#subject
以前firefox跳个票的时间现在可以发布几个正式版了-_-
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
2楼#
发布于:2012-02-28 12:07
这个已经讨论好几年了,元素隐藏规则是无法实现根据子元素来定位到父元素实现隐藏的。
元素隐藏规则其实就是CSS隐藏的变种:
http://adblockplus.org/zh_CN/faq_internal#elemhide
而这个不是拦截请求,只是隐藏掉,所以应该后台还是会下载的。只是隐藏的够快,快到你看不到下载的内容。
另外ABP令人纠结的一点就是不能实现过滤HTML代码。这样就可以过滤掉内嵌在HTML源代码里面的<script>这样的标签。
Firefox More than meets your experience
royallin
非常火狐
非常火狐
  • UID29014
  • 注册日期2009-05-31
  • 最后登录2016-12-07
  • 发帖数668
  • 经验46枚
  • 威望0点
  • 贡献值32点
  • 好评度0点
  • 社区居民
3楼#
发布于:2012-02-28 12:07
白左:0.ABP的元素隐藏并不会阻止内容下载,比如一个div中有个<a>包含的图片广告,隐藏了之后图片还是会下载,占用流量和带宽
但是我发现有的情况下,这种包含图片或者其他多媒体的容器,如果隐藏了它的某个父容器,就会不但隐藏还能阻止下载,看html结构的话,隐藏之后里面就没有东西了;而有的容器隐藏了之后里面的多媒体该下载还是要下载,这是为什么呢?


1. 请问CSS选择器有没有什么类似零宽断言之类的东西吗,比如
……
<parent>
   <div>xx</div>
   很多<div>
   <div>
        <center>想屏蔽的东西</center>
   </div>
</parent>

这些div都没什么可供标示的属性,但是子元素却有特点,比如这个想屏蔽的div下有且仅有一个子元素,所以我想选择“有且仅有一个<center>子元素的div”,可是用parent > div > center:only-child  选择的却是<center>, 有办法通过子元素的特点选择父元素吗?

这个问题是接第0个问题的,因为我想尝试把不影响浏览的顶级容器给隐藏掉,而不是下面的某个元素,这样隐藏之后说不定还能阻止下载,而且也不会留下空白
回到原帖

   应该是那个东西通过JS检测加载内容,当隐藏掉了那个元素后检测不到,所以脚本失效,东西就没有下载下来了。
   如果自动对应到父。那么同是这个父的元素不也误杀了吗?
其他可以通过数目来定位同父的元素 元素:nth-child(10)  数字对应层数。
royallin
非常火狐
非常火狐
  • UID29014
  • 注册日期2009-05-31
  • 最后登录2016-12-07
  • 发帖数668
  • 经验46枚
  • 威望0点
  • 贡献值32点
  • 好评度0点
  • 社区居民
4楼#
发布于:2012-02-28 12:07
fang5566:这个已经讨论好几年了,元素隐藏规则是无法实现根据子元素来定位到父元素实现隐藏的。
元素隐藏规则其实就是CSS隐藏的变种:
http://adblockplus.org/zh_CN/faq_internal#elemhide
而这个不是拦截请求,只是隐藏掉,所以应该后台还是会下载的。只是隐藏的够快,快到你看不到下载的内容。
另外ABP令人纠结的一点就是不能实现过滤HTML代码。这样就可以过滤掉内嵌在HTML源代码里面的<script>这样的标签。
回到原帖

  两年前向ABP作者提交过这个功能的请求,直接可替换,更改html代码。作者把我指向一个讨论帖子。。囧。现在这个功能还没有出现。
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
5楼#
发布于:2012-02-28 12:07
https://adblockplus.org/forum/viewtopic.php?f=4&t=5977
暂时无法实现。被rejected了。

I think that the most likely solution to the "remove parents by children" problem will be this one: http://www.w3.org/TR/selectors4/#subject. I don't know when Mozilla plans to implement it but I guess that it isn't too far off.

The problem when working with HTML code directly is that you don't have a DOM tree - the document hasn't been parsed yet and determining parent/child relations and similar is very non-trivial. Generally, I have doubts that the proposal here will ever be implemented. We already tried using the API required for HTML code filtering, in a non-modifying way (for redirect tracking). The side-effects were quite considerable, so in Adblock Plus 2.0 we no longer use it. I'm all but sure that I want to open that can of worms again.
Firefox More than meets your experience
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
6楼#
发布于:2012-02-28 12:07
谢谢楼上各位
要是什么时候能把元素隐藏当做屏蔽来用就好了~

因为学校网络不好,除了看起来美观,abp还有个很重要的作用就是少下载广告省流量节省带宽,所以本地载入时慢一点都无所谓了……学校晚上的网速……哪怕能省出10K/s也是好的……
-いたんですか? -ええ、ずっと
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
7楼#
发布于:2012-02-28 12:07
royallin
   应该是那个东西通过JS检测加载内容,当隐藏掉了那个元素后检测不到,所以脚本失效,东西就没有下载下来了。
   如果自动对应到父。那么同是这个父的元素不也误杀了吗?
其他可以通过数目来定位同父的元素 元素:nth-child(10)  数字对应层数。
回到原帖



唔,有道理
我最先观察到的就是在115,隐藏了某个广告容器后里面的图片也不见了
-いたんですか? -ええ、ずっと
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
8楼#
发布于:2012-02-28 12:07
元素隐藏与拦截请求是两种不同的技术,对于写在网页里面而不是独立于网页下载的内容,只能用元素隐藏。这是没办法的:
http://adblockplus.org/zh_CN/getting_started#general

外围容器被隐藏掉,根据CSS的继承,里面元素也隐藏掉了吧。
Firefox More than meets your experience
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
9楼#
发布于:2012-02-28 12:07
fang5566:元素隐藏与拦截请求是两种不同的技术,对于写在网页里面而不是独立于网页下载的内容,只能用元素隐藏。这是没办法的:
http://adblockplus.org/zh_CN/getting_started#general

外围容器被隐藏掉,根据CSS的继承,里面元素也隐藏掉了吧。
回到原帖



我记得mason啥的好像可以屏蔽写在html里的<script>之类的东西,是怎么做到的呢
-いたんですか? -ええ、ずっと
fang5566
管理员
管理员
  • UID3719
  • 注册日期2005-03-07
  • 最后登录2024-05-09
  • 发帖数18483
  • 经验4837枚
  • 威望5点
  • 贡献值4316点
  • 好评度1116点
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 终身成就
10楼#
发布于:2012-02-28 12:07
看 Mason 的主页介绍,主要功能有两个:
1、修改header
2、类似 greasemonkey

如果script标签在header里面,mason应该可以改吧,而具有greasemonkey的脚本功能,那更可以改了。
Firefox More than meets your experience
白左
千年狐狸
千年狐狸
  • UID34985
  • 注册日期2010-12-29
  • 最后登录2023-11-13
  • 发帖数2039
  • 经验655枚
  • 威望0点
  • 贡献值364点
  • 好评度69点
  • 社区居民
  • 忠实会员
11楼#
发布于:2012-02-28 12:07
fang5566:看 Mason 的主页介绍,主要功能有两个:
1、修改header
2、类似 greasemonkey

如果script标签在header里面,mason应该可以改吧,而具有greasemonkey的脚本功能,那更可以改了。
回到原帖



哦哦,谢谢
还好我没有太大的脚本屏蔽需求……猴子和mason都没用过,noscript放了一段时间也卸了~

*edit*
刚才把refcontrol卸了,装上了mason——因为发现mason很小,而且用起来很简单……天生对这种东西没有抵抗力(¯▽¯
-いたんですか? -ええ、ずっと
loveqianool
狐狸大王
狐狸大王
  • UID29223
  • 注册日期2009-06-19
  • 最后登录2022-01-29
  • 发帖数308
  • 经验153枚
  • 威望0点
  • 贡献值92点
  • 好评度2点
  • 社区居民
  • 忠实会员
12楼#
发布于:2012-02-28 12:07
也许你可以试试Proxomitron?
或者类似的开源项目privoxy 。
royallin
非常火狐
非常火狐
  • UID29014
  • 注册日期2009-05-31
  • 最后登录2016-12-07
  • 发帖数668
  • 经验46枚
  • 威望0点
  • 贡献值32点
  • 好评度0点
  • 社区居民
13楼#
发布于:2012-02-28 12:07
fang5566:https://adblockplus.org/forum/viewtopic.php?f=4&t=5977
暂时无法实现。被rejected了。

回到原帖

  悲剧
royallin
非常火狐
非常火狐
  • UID29014
  • 注册日期2009-05-31
  • 最后登录2016-12-07
  • 发帖数668
  • 经验46枚
  • 威望0点
  • 贡献值32点
  • 好评度0点
  • 社区居民
14楼#
发布于:2012-02-28 12:07
白左


哦哦,谢谢
还好我没有太大的脚本屏蔽需求……猴子和mason都没用过,noscript放了一段时间也卸了~

*edit*
刚才把refcontrol卸了,装上了mason——因为发现mason很小,而且用起来很简单……天生对这种东西没有抵抗力(¯▽¯
回到原帖

  要省流量,noscript不应该卸载掉了吧。。就算ABP可以拦截广告,统计。这些。但也要有对应规则,noscript的机制更加适合吧。
上一页
游客

返回顶部