天天看点

js脚本实现自由复制百度文库文字

这几天查看百度文库的文档,当复制部分文字的时候发现百度文库对文本复制做了长度限制,而开通VIP则略显不必要,同时也为了复习下js脚本制作,这里制作一个能够自由复制文库文字的脚本。

分析了下百度文库的限制方式,目测是通过js重写覆盖了默认的 ctrl+c 的方法并限制了复制的文字长度,因此原来的基本思路就是自己重写一个方法再次覆盖 ctrl+c 指令并将复制的内容直接复制到粘贴板上,但是脚本做好之后发现只有当全屏文档之后才能复制到粘贴板上且复制后的格式很乱,这里是调动了document.execCommand('copy')方法,网上查找了下该方法的用法但仍旧无法解决,如果有哪位大神知道失效原因的话还请不吝赐教。

既然上面的方法不行,那么改用将选中的文字显示出来再复制即可,因此这里的解决办法是 ctrl+c 之后将选中的文字放入自己创建的textarea中,效果有点类似alert。具体代码如下:

var isopen = false;
  window.onload = function () {
    var title = document.title;
    if (title.indexOf('百度文库') != -1) {
      window.document.onkeydown = newKeyDown;

      function newKeyDown(evt) {
        evt = (evt) ? evt : window.event
        if (evt.keyCode) {
          if (evt.ctrlKey && evt.keyCode == 67) {
            if (isopen) {
			  document.execCommand('copy');
              document.body.removeChild(document.getElementById("cover"));
              document.body.removeChild(document.getElementById("dialog"));
              isopen = false;
            } else {
              show(window.getSelection());
            }
          }
        }
      }
    }
  }

  function show(content) {
    isopen = true;
    var page_width = document.documentElement.scrollWidth;
    var page_height = document.documentElement.scrollHeight;
    var b_width = document.documentElement.clientWidth;
    var b_height = document.documentElement.clientHeight;
    var cover = document.createElement("div");
    cover.id = "cover";
    cover.style = 'background-color: black;opacity: 0.3;position: absolute;top: 0px;left: 0px;z-index: 99990;width:' + page_width + 'px;height:' + page_height + 'px';
    document.body.appendChild(cover);
    var dialog = document.createElement("div");
    dialog.id = "dialog";
    dialog.style.left = (b_width - 400) / 2 + "px";
    dialog.style.top = ( b_height - 300) / 2 + "px";
    dialog.style = 'width: 400px;height: 300px;background-color: white;position: fixed;z-index: 99999;left: 39%;top: 200px;border-radius: 5px;'
    var ku = document.body.appendChild(dialog);
    ku.innerHTML += '<textarea style="width:90%;height:90%;margin-left: 4.5%;margin-top: 3%">' + content.toString().replace(new RegExp(' ', 'g'), '&#10;') + '</textarea>';
    document.getElementById("cover").onclick = function () {
      document.body.removeChild(cover);
      document.body.removeChild(dialog);
    }
  }
           

将这段代码封装成js然后放入扩展插件那里就可以了,如不清楚可参考这里。

不想自己弄的也可以戳这里下载直接使用。