如何解决5秒钟后卡住的延迟循环?

时间:2019-06-27 08:08:47

标签: javascript html loops google-chrome asynchronous

我想创建一个Jscript,然后将其粘贴到Google Chrome Consol,它应该将元素的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秒
div类
copy1秒
div类
copy2秒
div类
copy3秒
div类
copy4秒
div类
copy5秒
copy6秒
copy7秒
copy8秒
copy9秒
完成

有什么办法解决这个问题吗? 5秒后到达剪贴板是否有时间限制? 是镀铬的限制,还是Windows(7)?

1 个答案:

答案 0 :(得分:0)

所以最后我设法解决了我的问题,但是我无法使用剪贴板,因为我们在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)
}

使用上述代码,Google chrome将下载内部HTML作为txt文件。最初,这会弹出一个“另存为”窗口,但是您可以在Chrome选项菜单中将其关闭,也可以在此处设置目标位置。 同时,明智的做法是,以相同的频率或在读取后使用不同的脚本删除下载的日志。