首页 > 解决方案 > 如何修复我在 5 秒后卡住的延迟循环?

问题描述

我想创建一个将粘贴到 Google Chrome 控制台的 Jscript,它应该将元素的 innerHTML 部分复制到剪贴板。这应该在很长一段时间内进行。

到目前为止,我设法编写了一个从 0 到 9 循环的代码,调用将内容复制到剪贴板的函数,然后休眠 1 秒。它还将循环数和数据本身写入控制台。

    function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
    function mycopy() {
        var copy = function (e) {
            e.preventDefault();
            var text = document.getElementsByClassName("md-tile")[0].innerHTML
            text = text.substring(0,10)
            console.log(text);
            if (e.clipboardData) {
                e.clipboardData.setData('text/plain', text);
            } else if (window.clipboardData) {
                window.clipboardData.setData('Text', text);
            }
        };
        window.addEventListener('copy', copy);
        document.execCommand('copy');
        window.removeEventListener('copy', copy);
    }

    var text = "a"
    for (let XYZ = 0; XYZ < 10; XYZ++) {
        console.log('copy' + XYZ + ' Sec');
        text = ""
        mycopy();
        await sleep(1000);
    }
    console.log('Done');

据我所知,以我有限的知识,上面的脚本应该复制类是“md-title”的第一个元素的内部 HTML。

但是它将在 5 秒后停止复制。(如果我们改变睡眠时间,仍然是 5 秒。)

这是控制台中的响应:

copy0 Sec
div 类
copy1 Sec
div 类
copy2 Sec
div 类
copy3 Sec
div 类
copy4 Sec
div 类
copy5 Sec
copy6 Sec
copy7 Sec
copy8 Sec
copy9 Sec
Done

有没有办法解决这个问题?5秒后到达剪贴板有时间限制吗?是 chrome 限制,还是 windows (7)?

标签: javascripthtmlloopsgoogle-chromeasynchronous

解决方案


所以最后我设法解决了我的问题,但是我无法使用剪贴板,因为我们在 5 秒后无法访问它。

我的解决方案是我将 HTML 部分下载为 txt。

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
function download(filename, text) {
      var element = document.createElement('a');
      element.setAttribute('href', 'data:text/plain;charset=utf-8,' + text);
      element.setAttribute('download', filename);
      element.style.display = 'none';
      document.body.appendChild(element);
      element.click();
      document.body.removeChild(element);
}

for (let XYZ = 0; XYZ < 10; XYZ++) {
    var text0 = document.getElementById('lastUpdate').innerHTML     
    download("DialogLiveLogTime.txt",text0);
    await sleep(2000);
    console.log('Round: ' + XYZ)
}

使用上面的代码,谷歌浏览器会将内部 HTML 下载为 txt 文件。最初这会弹出一个“另存为”窗口,但您可以在 Chrome 选项菜单中将其关闭,此外您还可以在那里设置目的地。同时,明智的做法是删除以相同频率或阅读后下载的日志,使用不同的脚本。


推荐阅读