获取剪贴板内容作为字符串变量

getting clipboard content as a string variable

正在尝试获取剪贴板内容作为字符串变量(例如页面 url 被复制);

控制台中 returns undefined 下面的代码。

function get_clip(){
 navigator.clipboard.readText().then(text => {return text;})
 .catch(err => {console.error('Failed to read clipboard contents: ', err);});
}

var str = get_clip();
console.log(str);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

那是因为执行get_clip()需要时间,读取剪贴板需要时间(想象一下剪贴板中可能有大量文本),而JavaScript引擎确实不停止而是执行下一行并记录 'undefined'。

异步JavaScript: (https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing)


因此,您可以做的是告诉 get_clip() 读完剪贴板后该做什么。你可以对 get_clip() 说,执行这个函数 aCallback 像这样:

var str = get_clip(aCallback);


试试这个代码:

function get_clip(callback) {
    navigator.clipboard.readText()
        .then(text => { return callback(text); })
        .catch(err => {
            console.error('Failed to read clipboard contents: ', err);
        });
}

var str = get_clip(aCallback);

function aCallback(text) {
    console.log(text);
}

您无法像这样获取剪贴板的值有两个原因:

  1. 你的函数是异步的,所以当你调用你的函数时 没有调用 return,您的值等于未定义。您可以使用 回调函数传入 get_clip func 的参数来完成你的工作 用你的结果。
  2. 出于安全原因,您不能以编程方式调用剪贴板 导航器不允许您在没有用户操作的情况下访问剪贴板 与网页。这就是为什么只有单击按钮才能访问用户剪贴板的原因。

function get_clip(callBack) {
  navigator.clipboard.readText()
    .then(text => {
      callBack(text);
    })
    .catch(err => {
      console.error('Failed to read clipboard contents: ', err);
    });
}


let callback = function(str) {
  console.log(str);
};

document.querySelector('#showClipboard').addEventListener('click', function() {
  get_clip(callback);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showClipboard">click me to show clipboard</button>

只是给出不同形式的答案,包括 async 函数:

function get_clip(){

    navigator.clipboard.readText()
    .then(text => {
        console.log('Pasted content: ', text);
    })
    .catch(err => {
        console.error('Failed to read clipboard contents: ', err);
    });

}

get_clip();

并使用async函数:

async function get_clip(){
    try {
        return await navigator.clipboard.readText();
    } catch (err) {
        console.error('Failed to read clipboard contents: ', err);
    }
}

get_clip().then(str => console.log(str));