添加烦人的“阅读更多”内容的站点是ShareThis。
为了防止这种不良行为,您可以使用三种不同的选择:
禁用剪贴板事件
这些网站使用剪贴板API,使Web开发人员可以拦截复制/剪切/粘贴操作并在执行操作时执行一些代码。这就是ShareThis(和其他类似网站)的工作方式。它只是等待复制事件,并且在执行有效复制之前,它会添加一个额外的文本“图层”,其中包含令人讨厌的“-See ...”。
现在的问题是:是否有任何方法可以禁用剪贴板事件?不幸的是,我无法在Chrome / Chromium中找到执行此操作的方法,但是在Firefox中,可以通过两种不同的方式实现。
- 进入
about:config
并搜索dom.event.clipboardevents.enabled
。双击键(将其设置为false
),瞧!您已禁用剪贴板事件,没有人会再次触摸剪贴板。
- 对于Firefox的较旧版本(确实是较旧的版本),此扩展名的功能与该
about:config
选项完全相同。
禁用剪贴板事件不会损害任何网站的体验,因为它们很少被使用,并且实际上没有使用它们的目的(垃圾邮件除外)。
让我们进入第二个解决方案。
阻止ShareThis
如果您不需要ShareThis,则只需阻止该w.sharethis.com
域。负责加载ShareThis(并注册ClipboardEvent
)的Javascript 从该网站加载。
您可以用不同的方式阻止它,从简单的AdBlock过滤器到编辑主机文件(由于我的名声无法放置更多链接,因此此处未涉及或链接)。
通过hosts
文件执行此操作的示例:
127.0.0.1 w.sharethis.com
第三种解决方案是最难解决的,只能作为不得已而为之。
在有问题的网站上禁用选择功能
这些网站使用Selection
API来编辑要复制到剪贴板的内容,该API允许他们即时编辑选择。因此,一种解决方案是完全禁用任何一种Selection
(显然在代码方面。您仍然可以执行选择)。
这可以通过简单的Tampermonkey / Greasemonkey脚本来完成。由于我目前无法安装Chrome,因此我仅在Firefox上进行了测试。对此我感到抱歉。
这是源代码:
// ==UserScript==
// @name Goodbye selections
// @namespace tag: utils
// @include $put_here_a_website_you'd_like_to_disable_selections$
// @include $more_websites$
// @version 1
// @grant none
// ==/UserScript==
(function() {
var disableSelections = function() {
document.getSelection = window.getSelection = function() {
return { isCollapsed: true };
};
};
var script = document.createElement ("script");
script.appendChild (document.createTextNode ("(" + disableSelections + ")();"));
(document.body || document.head || document.documentElement).appendChild (script);
})();
为此,您应该创建一个新的Greasemonkey / Tampermonkey脚本并调整@include
指令。您可以每行放置一个网站,它必须像那样完成@include http://bad.website.address/
。
我已经在您链接的两个网站上对其进行了测试,并且没有问题。但是,请记住,这可能会导致问题,因为Selection
s被完全合法的网站使用(例如,当您单击按钮时,StackExchange文本框使用它们将符号插入符号到插入符号的位置),因此应启用该用户脚本仅在有问题的网站上显示。
(请注意,//
如果您要从Greasemonkey / Tampermonkey菜单创建用户脚本,则可能需要删除开头的行,它们会自动添加它)
用户脚本的解释非常简单。首先,它定义了一个名为的函数,该函数disableSelections
将默认值document.getSelection
和window.getSelection
函数替换为仅返回包含的对象的函数{ isCollapsed: true }
。为什么?因为ShareThis(我已经在他们的JS代码中检查了)调用该函数并检查该isCollapsed
属性是否设置为true
(如果设置为,它将停止“剪贴板中毒”)。诸如此类的其他网站可能不会执行该检查,但是当它们尝试调用Selection
对象的合法函数时,它们只会以错误结尾。
然后将该功能注入到正文/标题/文档中,它将自动执行。您可能会问的一个问题是:如果Javascript允许(几乎)覆盖每个函数,那么为什么addEventListener
在事件为复制/剪切/粘贴时不覆盖该函数以简单地不执行任何操作?答案很简单。用户脚本在不可预测的时间执行,这意味着ShareThis Javascript可以在用户脚本之前加载,并且不会执行任何操作。相反,仅重写该window.getSelection
函数就不会有任何问题,因为仅在执行复制时才调用该函数,并且我们100%确定复制文本时,该用户脚本已经加载。
结论
最好,最干净的解决方案显然是第一个,因为它禁用了几乎无用的API。
第二个也是有效的,但是您将失去任何ShareThis功能。
第三个是最“ hacky”的,但作为最后手段,它可以工作。