什么鬼?

版权狗退散,妈妈再也不用担心我被侵权了(其实只防君子不防小人)。

类似知乎,在网站复制长度大于 42 的文本时自动加上这样的版权声明:

著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:DIYgod
链接:https://www.anotherhome.net/
来源:Anotherhome

原理:

  1. 监听 copy 事件
  2. 使用 window.getSelection() 获取选中的文本
  3. 使用 clipboardData.setData 操作剪贴板的内容

JS 代码:

document.body.addEventListener('copy', function (e) {
    if (window.getSelection().toString() && window.getSelection().toString().length > 42) {
        setClipboardText(e);
        alert('商业转载请联系作者获得授权,非商业转载请注明出处,谢谢合作。');
    }
});
 
function setClipboardText(event) {
    var clipboardData = event.clipboardData || window.clipboardData;
    if (clipboardData) {
        event.preventDefault();
 
        var htmlData = ''
            + '著作权归作者所有。<br>'
            + '商业转载请联系作者获得授权,非商业转载请注明出处。<br>'
            + '作者:DIYgod<br>'
            + '链接:' + window.location.href + '<br>'
            + '来源:Anotherhome<br><br>'
            + window.getSelection().toString();
        var textData = ''
            + '著作权归作者所有。\n'
            + '商业转载请联系作者获得授权,非商业转载请注明出处。\n'
            + '作者:DIYgod\n'
            + '链接:' + window.location.href + '\n'
            + '来源:Anotherhome\n\n'
            + window.getSelection().toString();
 
        clipboardData.setData('text/html', htmlData);
        clipboardData.setData('text/plain',textData);
    }
}

已知问题:

iOS Safari 不兼容 clipboardData.setData() 方法,所以在 iOS Safari 上无效

 
另附知乎原版关键代码,原理类似,感兴趣也可以看看:

var lz = function (a, b, c) {
    function d(a, b) {
        return ["著作权归作者所有。", "商业转载请联系作者获得授权,非商业转载请注明出处。", "作者:" + b, "链接:" + a, "来源:知乎", "", ""]
    }
 
    function f(a, b, c) {
        return "\x3cdiv\x3e" + d(b, c).join("\x3cbr /\x3e") + a + "\x3c/div\x3e"
    }
 
    function g(a) {
        var g = z.Wq(), m = g && (0, z.ib)(g.Ed());
        if (m && !(42 > m.length)) {
            if ("object" === typeof a.originalEvent.clipboardData && (a.originalEvent.clipboardData.setData("text/html", f(g.Of(), b, c)), a.originalEvent.clipboardData.setData("text/plain", d(b, c).join("\n") + m), 0 < a.originalEvent.clipboardData.getData("text/plain").length)) {
                a.preventDefault();
                return
            }
            if (window.getSelection) {
                a = g.Of();
                var n = (0, window.$)(f(a, b, c)).css({position: "fixed", left: "-9999px"}).appendTo("body");
                window.getSelection().selectAllChildren(n.get(0));
                (0, window.setTimeout)(function () {
                    g.select();
                    n.remove()
                }, 200)
            }
        }
    }
 
    a && b && c && (z.Fa(b, "http") || (b = window.location.protocol + "//" + window.location.host + b), a.on("copy", g))
};

相关https://github.com/egoist/corner-notie
来自:https://www.anotherhome.net/2298

另外:js控制在网页中禁用右键和禁止另存为

来自网络
不用js也可以控制禁止右键!方法:

<!--禁止网页另存为: -->
<noscript><iframe src=*.html></iframe></noscript><!-- 禁止选择文本: -->
<script type="text/javascript">// <![CDATA[
var omitformtags=["input", "textarea", "select"]
omitformtags=omitformtags.join("|")
function disableselect(e){
if (omitformtags.indexOf(e.target.tagName.toLowerCase())==-1)
return false
}
function reEnable(){
return true
}
if (typeof document.onselectstart!="undefined")
document.onselectstart=new Function ("return false")
else{
document.onmousedown=disableselect
document.onmouseup=reEnable
}
// ]]></script>
<!-- 禁用右键: -->
<script type="text/javascript">// <![CDATA[
function stop(){
return false;
}
document.oncontextmenu=stop;
// ]]></script>

标签:JavaScript

1 条评论

  1. 这个站点还真是以“复制为主”,逃

你的评论