AdguardTeam / AdguardTeam/Scriptlets

Add new scriptlet — 'prevent-click'

未关闭
#449 2 条评论 0 个 reaction 已指派 1 人 已被 @maximtop 认领 在 GitHub 查看
Feature request Priority: P4
主要语言
JavaScript
星标
195
派生
33
PR 合并指标
30 天内没有已合并 PR

描述

Recently I have noticed that some websites uses `click()` to open popups.
For example:
```js
(() => {
const url = '/popup';
const createElm = document.createElement("a");
createElm.href = url;
createElm.target = "_blank";
createElm.click();
/*
do something, for example load video player
*/
console.log('something');
})();
```

We could add a scriptlet to prevent `click` if clicked element has specific attribute (like `href`) with specific content.
For example (might need improvements, just an idea):
```js
(() => {
const preventClick = (element, content) => {
const wrapper = (target, thisArg, args) => {
const match = content.split(':');
const [attribute, text] = match;
if(thisArg.matches(element) && thisArg[attribute].includes(text)) {
return;
}
return Reflect.apply(target, thisArg, args);
};
const handler = {
apply: wrapper
};
window.HTMLElement.prototype.click = new Proxy(window.HTMLElement.prototype.click, handler);
};
// Prevent clicking "a" element if "href" contains "popup"
preventClick('a', 'href:popup');
})();
```

贡献指南

这个仓库没有索引到贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。