当尝试在 Android 版 chrome 上复制一些文本时,navigator.clipboard.writeText()只要我之后不显示警报,它就可以工作。当我显示alert()时,它就不再起作用了。
例如,这按预期工作正常
function myFunction() {
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
}Run Code Online (Sandbox Code Playgroud)
<input type="text" value="Hello world" id="myInput" style="width:auto">
<button onclick="myFunction()">copy</button>Run Code Online (Sandbox Code Playgroud)
然而这不起作用,它不会在控制台中抛出任何错误,并且在 PC 上的 Chrome 上运行良好,但不适用于 Android。
function myFunction()
{
var copyText = document.getElementById("myInput");
copyText.select();
copyText.setSelectionRange(0, 99999);
navigator.clipboard.writeText(copyText.value);
alert("Successfully copied the text")
}Run Code Online (Sandbox Code Playgroud)
<input type="text" value="Hello world" id="myInput" style="width:auto" >
<button onclick="myFunction()" >copy</button>Run Code Online (Sandbox Code Playgroud)
任何人都知道发生了什么事?!谢谢
为什么navigator.clipboard总是undefined在以下代码段中?
var clipboard = navigator.clipboard;
if (clipboard == undefined) {
console.log('clipboard is undefined');
} else {
clipboard.writeText('stuff to write').then(function() {
console.log('Copied to clipboard successfully!');
}, function() {
console.error('Unable to write to clipboard. :-(');
});
}
Run Code Online (Sandbox Code Playgroud)
有关剪贴板API的更多信息,请访问此处.
Chrome版本:68.0.3440.106.
我确信这在某些方面有效,但不再是.这很令人困惑,因为这个表表明Clipboard API是在Chrome中实现的(已经有一段时间了),但是这个特定的API方法表表明API的所有方法都不受支持?
我目前正在使用navigator.clipboard.writeText()将元素中的值复制到剪贴板,但是,它似乎适用于除Safari 中的 iPhone X 和 iPhone 6 Plus 之外的所有设备。
浏览器是最新的,根据 MDN,它们应该可以与这些版本的 safari 配合使用。该代码似乎适用于桌面、Android 和其他 IOS 设备(例如 iPhone 12)。
在 iPhone X 和 6 Plus 上,它会在控制台中的这两个设备上引发 Promise 错误,并且不会复制到剪贴板:
Unhandled Promise Rejection: TypeError: undefined is not an object (evaluating 'navigator.clipboard.writeText')
有没有人经历过类似的事情并看到/提出了解决方案?谢谢!
代码片段:
const coupon = couponSelector.value;
if (notMissing(coupon) && coupon !== '') {
navigator.clipboard
.writeText(coupon)
.then(() =>
LOGGER.debug({}, `${LOGGER_PREFIX}: Promise Successful.Copied coupon: ${coupon}`),
)
.catch((e) => LOGGER.error({ e }, `${LOGGER_PREFIX}: Promise Failed:`));
}
Run Code Online (Sandbox Code Playgroud)