解决segmentfault等网站的登录复制限制

 

不知道从什么时候开始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,只需要几行代码就能解决了。

/assets/images/sf/sf_log_pos.png

/assets/images/sf/sf_login_func.png

(function () {
	const span = document.createElement("span");
  span.id = 'SFUserId';
  span.innerText = '123321'
  document.body.appendChild(span);
})();

希望决策者不要把程序员当傻子,稍微有点经验的程序员解决这种问题易如反掌,再不济在浏览器把你js禁用了你也无可奈何。还是把心思放在产品上吧,别想这种歪点子。