13

我正在尝试两种选择:

  • 忽略右键
  • 忽略ctrl+ C, ctrl+A

这是我的代码:

function noMenu() {
  return false;
}
function disableCopyPaste(elm) {
  // Disable cut/copy/paste key events
  elm.onkeydown = interceptKeys
  // Disable right click events
  elm.oncontextmenu = function() {
    return false
  }
}
function interceptKeys(evt) {
  evt = evt||window.event // IE support
  var c = evt.keyCode
  var ctrlDown = evt.ctrlKey||evt.metaKey // Mac support
  // Check for Alt+Gr (http://en.wikipedia.org/wiki/AltGr_key)
  if (ctrlDown && evt.altKey) return true
  // Check for ctrl+c, v and x
  else if (ctrlDown && c==67) return false // c
  else if (ctrlDown && c==86) return false // v
  else if (ctrlDown && c==88) return false // x
  // Otherwise allow
  return true
}

这是我的 HTML:

<body class="node88" oncontextmenu="return noMenu();" onkeydown="return disableCopyPaste();">

noMenu()功能正在运行,但disableCopyPaste()不起作用。

4

11 回答 11

18

你不能。

您可以尝试阻止某些向量(例如使右键单击更加困难的黑客,拦截ctrl+ c,使选择文本变得困难)……但是它们只会起作用,并且不可能阻止所有向量(编辑->复制? 查看源代码? wget? 等等...)。

如果您试图保护您的内容免受技术含量较低的用户的攻击,这些方法可能没问题……但正如这里的评论所暗示的那样,它们会让更多的技术用户感到沮丧。

如果您有必须保护的敏感内容,您可能需要考虑将其嵌入到 Flash blob 或 DRM'd PDF 中。这些仍然可以进行逆向工程,但需要更聪明的攻击者。

于 2012-03-31T18:35:48.107 回答
10

您可以禁用页面上的文本选择,而不是尝试控制用户的键盘命令(某些浏览器可能会将其检测为恶意代码)。尽管这不会避免数据被复制,如您的评论中所述。

<!-- Disable Copy and Paste-->
<script language='JavaScript1.2'>
function disableselect(e) {
    return false
}

function reEnable() {
    return true
}

document.onselectstart = new Function (&quot;return false&quot;)

if (window.sidebar) {
    document.onmousedown = disableselect
    document.onClick = reEnable
}
</script>

把它放在你的

    <head> </head> 

标签,用户无法选择页面上的文本。

在http://myblog-log.blogspot.com/2007/06/disable-copy-and-paste.html上找到

于 2012-03-31T18:38:46.353 回答
7

Javascript:

//disable mouse drag select start

document.onselectstart = new Function('return false');

function dMDown(e) { return false; }

function dOClick() { return true; }

document.onmousedown = dMDown;

document.onclick = dOClick;

$("#document").attr("unselectable", "on"); 

//disable mouse drag select end

//disable right click - context menu

document.oncontextmenu = new Function("return false");


//disable CTRL+A/CTRL+C through key board start

//use this function


function disableSelectCopy(e) {

// current pressed key

    var pressedKey = String.fromCharCode(e.keyCode).toLowerCase();

    if (e.ctrlKey && (pressedKey == "c" || pressedKey == "x" || pressedKey == "v" || pressedKey == "a")) {

        return false;

    }

}

document.onkeydown = disableSelectCopy;


//or use this function

$(function () {

    $(document).keydown(function (objEvent) {

        if (objEvent.ctrlKey || objEvent.metaKey) {

            if (objEvent.keyCode == 65 || objEvent.keyCode == 97) {

                return false;

            }

        //}

        }

    });

});

CSS:

//disable selection through CSS for different browsers

#document, #ctl00_MasterPageBodyTag{
    user-select: none;
    -ms-user-select: none;
    -o-user-select:none;
    -moz-user-select: none;
    -khtml-user-select: none;
    -webkit-user-select: none;
    -webkit-touch-callout: none;
}

//where #document is the div for which select needs to be disabled and #ctl00_MasterPageBodyTag is the id of the body tag.
于 2014-05-10T08:26:50.110 回答
6

您可以控制将哪些文本放入剪贴板:

document.addEventListener('copy', function(e) {
    e.clipboardData.setData('text/plain', 'Please do not copy text');
    e.clipboardData.setData('text/html', '<b>Please do not copy text</b>');
    e.preventDefault();
});

https://developer.mozilla.org/en-US/docs/Web/Events/copy

于 2017-10-13T21:26:18.290 回答
3

为什么不尝试使文本不可选择?

.unselectable {
  -webkit-user-select: none;  /* Chrome all / Safari all */
  -moz-user-select: none;     /* Firefox all */
  -ms-user-select: none;      /* IE 10+ */
  user-select: none;          /* Likely future */       
}


/*Mobile*/

-webkit-touch-callout: default   /* displays the callout */
-webkit-touch-callout: none      /* disables the callout */

我也将很快编辑这个答案。我在看同样的问题。但我发现了一些关于如何覆盖的信息。我正在编写一个 JS 函数,当用户复制剪贴板时,它会被覆盖。无论如何都会在完成后发布。还在用它做实验。你可以阅读我发现的关于 CSS 技巧的文章。

https://css-tricks.com/copy-paste-the-web/

于 2015-07-20T16:12:00.300 回答
2

您可以在页面中禁用“上下文菜单”、“复制”、“剪切”和“粘贴”:

<script type="text/javascript">
    document.oncontextmenu = new Function('return false')
    document.body.oncut = new Function('return false');
    document.body.oncopy = new Function('return false');
    document.body.onpaste = new Function('return false');
</script>
于 2020-12-23T18:40:14.263 回答
1

您可以使用 CSS 来不允许选择任何文本,因此不会有任何文本复制的机会。

将以下 CSS 和 JS 添加到正文中:

CSS:

    <style>
    .unselectable
    {
        -moz-user-select:none;
        -webkit-user-select:none;
        cursor: default;
    }
    html
    {
        -webkit-touch-callout: none;
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
        -webkit-tap-highlight-color: rgba(0,0,0,0);
    }
</style>

JS:

<script id="wpcp_css_disable_selection" type="text/javascript">
var e = document.getElementsByTagName('body')[0];
if(e)
{
    e.setAttribute('unselectable',on);
}
</script>
于 2017-08-24T07:03:09.947 回答
0
$('some.selector').bind('cut copy paste', function (e) {
    e.preventDefault();
});

这适用于 Chrome、Firefox、Safari、IE11 和 Edge。对于我的测试,我正在使用<div contenteditable>. 来源文章:

https://www.codexworld.com/disable-mouse-right-click-cut-copy-paste-using-jquery

于 2018-07-12T21:55:30.953 回答
0

如果您正在寻找简单的 HTML 来禁用特定元素上的复制和粘贴,请使用以下代码。您甚至可以通过将其放在正文标签上来阻止整个页面。

<div oncontextmenu="return false" onkeydown="if ((arguments[0] || window.event).ctrlKey) return false"></div>

oncontextmenu="return false" onkeydown="if ((arguments[0] || window.event).ctrlKey) return false"

于 2018-07-26T14:24:22.543 回答
0

如果您不想阻止突出显示或只允许用户复制有限数量的字符:

  function anticopy(event: ClipboardEvent) {    
    // @ts-ignore
    const clipboardData = event.originalEvent.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
    const txt = window.getSelection().toString() || editor.getWin().getSelection().toString();
    if (txt.length > 200) {
      const no = 'You cannot copy more than 200 characters.';
      clipboardData.setData('text', no);
      clipboardData.setData('text/html', `<p>${no}</p>`);
    } else {
      const html = `<p><span data-user="${user.data.id}"></span> ${txt}</p>`;
      clipboardData.setData('text', txt);
      clipboardData.setData('text/html', html);
    }

    event.preventDefault();
  }
于 2020-04-19T19:41:50.607 回答
-3

网站真实复制保护

http://www.securebit.xyz/

在将其声明为垃圾邮件或广告之前,请访问示例页面以获取证据。尝试从示例页面复制内容。

http://www.securebit.xyz/

欲了解更多详情和购买信息,请通过 websecurecontent@protonmail.com 写信给我们

好处

支持所有语言(英语、印地语、泰米尔语、马拉雅拉姆语等) 支持所有 CMS,包括 Wordpress、Drupal、Joomla 等 内容不能从页面源复制。无法使用开发者工具复制内容。无法使用任何浏览器上的任何附加组件/扩展程序复制内容。无法通过禁用 javascript 来复制内容。

于 2018-05-22T11:32:32.250 回答