不知道从什么时候开始segmentfault也启用了需登录才能复制的限制,其实我很反感这种限制。尤其是作为一个技术社区,这样的限制又怎么能真的对技术人员有用?下面开始贴代码解决这烦人的限制。
对于这类禁止复制的,大多都是通过监听dom的copy事件实现的,segmentfault也一样。我们只需要把原本的eventlistener移除即可。
(function() {
let arr = Array.from(document.querySelectorAll("article.article"));
if (arr && arr.length <= 0) { return; }
let articleContent = arr[0];
let eventHolder = getEventListeners(articleContent);
if (!eventHolder || !eventHolder.copy) { return; }
eventHolder.copy.forEach(e => {
articleContent.removeEventListener('copy',e.listener)
})
})();
当然还有个有点搞笑的办法,观察segmentfault的console输出,每次选中有一段log,点进去发现会查找一个SFUserId的dom节点获取用户ID,只需要几行代码就能解决了。
(function () {
const span = document.createElement("span");
span.id = 'SFUserId';
span.innerText = '123321'
document.body.appendChild(span);
})();
希望决策者不要把程序员当傻子,稍微有点经验的程序员解决这种问题易如反掌,再不济在浏览器把你js禁用了你也无可奈何。还是把心思放在产品上吧,别想这种歪点子。