Chrome 扩展 AdBlock 的 hide something on this page 背后的工作原理

AdBlock 的 隐藏此页面上的某些内容 功能是基于网页内容过滤技术实现的。这项技术涉及到对网页的 DOM(Document Object Model)结构进行分析和操作。DOM 是一个跨平台和语言独立的接口,它允许程序和脚本动态访问和更新内容、结构以及网页的样式。当你使用 AdBlock 的这一功能时,实际上是在指导 AdBlock 通过特定的规则,对网页的 DOM 进行修改,以达到隐藏某些元素的目的。

工作原理

AdBlock 的这一功能背后的工作原理可以分为以下几个步骤:

1. 元素选择

当用户激活 隐藏此页面上的某些内容 功能时,AdBlock 将网页置于一种特殊的选择模式。在这个模式下,用户可以通过鼠标悬停和点击来选择网页上想要隐藏的元素。这一过程背后,AdBlock 正在实时分析你的鼠标指针下的 DOM 元素。通过识别这些元素的特定标签、类名、ID 或其他属性,AdBlock 能够精确地定位到用户想要操作的对象。

2. 生成过滤规则

选中元素后,AdBlock 需要生成一条过滤规则,用以在未来自动隐藏这个元素。这个规则是基于元素的 CSS 选择器生成的。CSS 选择器是一种模式,用于选择要改变样式的 HTML 元素。在 AdBlock 的场景中,这些选择器被用来确定哪些 DOM 元素将被隐藏。

例如,如果你选择隐藏一个广告横幅,这个横幅的 HTML 元素可能是这样的:

<div id="banner-ad" class="ad-class">...</div>

AdBlock 可能会生成一个基于 ID 或类名的过滤规则,如 #banner-ad.ad-class

3. 应用过滤规则

有了过滤规则后,AdBlock 接下来会在用户访问该页面时自动应用这条规则。这是通过注入一段特定的 CSS 代码到网页中实现的,该 CSS 代码会将对应元素的 display 属性设置为 none,从而实现隐藏效果。继续上面的例子,实现这一效果的 CSS 代码可能如下:

#ad-banner, .ad-class { display: none; }

这段 CSS 代码的作用是,将 ID 为 banner-ad 或类名为 ad-class 的所有元素在网页上隐藏起来。

举例说明

假设你经常访问一个体育新闻网站,但这个网站的文章底部有一个非常大的推荐阅读部分,这部分内容由于并不总是与你的兴趣相关,因此你希望将其隐藏。这个推荐阅读部分可能包含在一个如下的 HTML 元素中:

<div class="recommended-articles">...</div>

使用 AdBlock 的 隐藏此页面上的某些内容 功能,你可以选择这个 div 元素,并让 AdBlock 生成一条隐藏它的过滤规则。AdBlock 会分析这个元素,识别其类名 recommended-articles,并创建一个 CSS 选择器。然后,AdBlock 会将一段将此选择器对应元素隐藏的 CSS 代码注入到网页中,如:

.recommended-articles { display: none; }

下次当你再次访问这个体育新闻网站时,AdBlock 会自动应用这条规则,你就不会再看到那个推荐阅读部分了。

总结

AdBlock 的 隐藏此页面上的某些内容 功能不仅展示了对用户体验的深度定制化,也体现了现代 web 技术在内容过滤领域的应用。通过对 DOM 的分析和操作,以及智能生成并应用 CSS 规则,这个功能赋予了用户更大的控制权,使他们能够根据自己的偏好调整网页内容。尽管这一功能在实现上相对直接,但它背后的原理涉及了网页开发的核心技术,是一个典型的利用前端技术解决实际问题的例子。

### 三重态损失在跨模态对齐中的应用 为了实现有效的跨模态对齐,许多研究工作采用了三重态损失(Triplet Loss)作为一种监督机制。这种方法旨在最小化同一类别样本之间距离的同时最大化不同类别样本间的距离。 #### Triplet Loss 的定义与作用 三重态损失通常用于度量学习中,其核心思想是在嵌入空间中拉近正样本的距离并推开负样本的距离。具体来说,在给定锚点\(a\)、正样本\(p\)以及负样本\(n\)的情况下,三重态损失可以表达为: \[ L(a, p, n) = \max(0, d(f(a), f(p)) - d(f(a), f(n)) + margin) \] 其中 \(d(\cdot)\) 表示某种形式的距离度量,比如欧氏距离;\(f(\cdot)\) 是映射函数,负责将输入数据投影到新的特征空间;margin 则是一个超参数,用来控制正负样本之间的最小间隔[^1]。 对于跨模态任务而言,可以通过构建包含来自两种不同类型的数据集的三元组来训练模型,使得相同语义但在不同表征下的对象尽可能接近彼此而在与其他类别的区分上更加明显[^4]。 #### 实现方法 一种常见的做法是结合卷积神经网络(CNNs)或其他类型的编码器结构提取每种模式的独特特性,并通过全连接层或者其他方式获得固定长度向量表示。之后便可以在这些高层抽象之上施加 triplet loss 来优化整个系统的权重更新过程。 下面给出一段 Python 伪代码展示如何在一个简单的例子中使用 PyTorch 库实现这一思路: ```python import torch from torch import nn class EmbeddingNet(nn.Module): def __init__(self): super().__init__() self.model = nn.Sequential( nn.Conv2d(in_channels=..., out_channels=...), ... nn.Linear(...)) def forward(self, x): return F.normalize(self.model(x)) def triplet_loss(anchor, positive, negative, margin=1.0): distance_positive = (anchor - positive).pow(2).sum(dim=-1) distance_negative = (anchor - negative).pow(2).sum(dim=-1) losses = F.relu(distance_positive - distance_negative + margin) return losses.mean() # Training loop... for epoch in range(num_epochs): for batch_idx, ((img_a, img_p), label_n) in enumerate(train_loader): optimizer.zero_grad() emb_anchor = embedding_net(img_a.cuda()) emb_pos = embedding_net(img_p.cuda()) emb_neg = embedding_net(label_n.cuda()) loss = triplet_loss(emb_anchor, emb_pos, emb_neg) loss.backward() optimizer.step() ``` 此段代码展示了基本框架,实际项目可能还需要考虑更多细节如批次采样策略等以提高效率和效果[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汪子熙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值