获取剪贴板内容作为字符串变量
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);
}
您无法像这样获取剪贴板的值有两个原因:
- 你的函数是异步的,所以当你调用你的函数时
没有调用
return
,您的值等于未定义。您可以使用
回调函数传入 get_clip
func 的参数来完成你的工作
用你的结果。
- 出于安全原因,您不能以编程方式调用剪贴板
导航器不允许您在没有用户操作的情况下访问剪贴板
与网页。这就是为什么只有单击按钮才能访问用户剪贴板的原因。
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));
正在尝试获取剪贴板内容作为字符串变量(例如页面 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);
}
您无法像这样获取剪贴板的值有两个原因:
- 你的函数是异步的,所以当你调用你的函数时
没有调用
return
,您的值等于未定义。您可以使用 回调函数传入get_clip
func 的参数来完成你的工作 用你的结果。 - 出于安全原因,您不能以编程方式调用剪贴板 导航器不允许您在没有用户操作的情况下访问剪贴板 与网页。这就是为什么只有单击按钮才能访问用户剪贴板的原因。
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));