代码之家  ›  专栏  ›  技术社区  ›  stackers bsyk

如何判断粘贴的数据是否是从我的页面复制的?

  •  0
  • stackers bsyk  · 技术社区  · 5 年前

    我想写一个所见即所得编辑器。我不希望人们能够粘贴到外国的html,所以我想我可以把它转换成文本。但是如果html来自同一个元素(或者可能的话跨站点),我仍然希望它被粘贴。

    那么,有没有办法从粘贴事件中检测内容的来源呢?

    3 回复  |  直到 5 年前
        1
  •  2
  •   blackening    5 年前

    https://developer.mozilla.org/en-US/docs/Web/API/Element/copy_event ).

    setData API

    粘贴时,抓取相应的事件并查找自定义数据类型。

    document.addEventListener('copy', (event) => {
    
        event.clipboardData.setData('text/test', 'sum text here');
        const selection = document.getSelection();
    
        // Essentially brute force copying selection.
        const range = selection.getRangeAt(0);
        const div = document.createElement('div');
        div.appendChild(range.cloneContents());
        const copy = div.innerHTML;
    
        event.clipboardData.setData('text/html', copy);
        event.preventDefault();
    });
    
    document.addEventListener('paste', (event) => {
        const clipboard = (event.clipboardData || window.clipboardData);
        let pasteTest = clipboard.getData('text/test');
        let paste = clipboard.getData('text/html');
        console.log (paste, '@@@@@@@@@@@', pasteTest);
    });
    
    
    
        2
  •  0
  •   Pinetree    5 年前

        3
  •  0
  •   user10918789 user10918789    5 年前

     var let_paste = false;
    
        function handleCopy (e) {
    
            var clipboardData, pastedData;
    
            pastedData = e.clipboardData.getData('Text');
    
            // When let_paste is true the content have been copied from this site
            let_paste = true;
    
            alert('let it paste!')
        }
    
        document.getElementById('myDiv').addEventListener('copy', handleCopy);
    <div id='myDiv' contenteditable='true'>Copy</div>

    考虑上面的代码-我的想法是设置一个全局变量来控制内容是否从该站点复制-当内容从您的站点复制时,创建一个事件将其设置为true。然后,将内容本身保存在变量中,并在用户执行“粘贴”事件时与粘贴的内容进行比较。