写了一个可以在控制台执行力扣代码的脚本[js 语法]

2020-11-17 15:45:21 +08:00
 xiyuesaves

有的时候可能粗心打错了字符导致提交出错,修改之后再点执行又得等半天或者直接告诉你点的太快了...,不过我本来就写的是 js,那为什么不直接用浏览器来测试代码呢,所以就写了这个脚本,可以先在本地测试,没有问题后再去提交 欢迎大家提意见哈
greasyfork 地址

1802 次点击
所在节点    程序员
8 条回复
lisianthus
2020-11-17 15:57:18 +08:00
没有考虑死循环吧,不小心写了个死循环标签页就炸了
xiyuesaves
2020-11-17 16:02:58 +08:00
@lisianthus 嗯,没有考虑这些,不过力扣反正也有自动保存,炸了刷新下就行了🤪
lisianthus
2020-11-17 16:18:31 +08:00
大概查了一下,可以用 Worker 。代码如下:
const runCode = (timeout, code) => {
````const script = document.createElement('script');
````script.textContent = code;
````const blob = new Blob([script.textContent]);
````const url = window.URL.createObjectURL(blob);
````const worker = new Worker(url);
````setTimeout(() => worker.terminate(), timeout);
}
xiyuesaves
2020-11-17 17:00:52 +08:00
@lisianthus 谢谢你的建议! 我将执行代码部分修改为 web Worker,现在可以在指定时间后结束线程,防止页面卡死了❤️
```
const runCode = (timeout, code) => {
const script = document.createElement('script'); // 创建脚本元素
script.textContent = code; // 元素内写入 code
const blob = new Blob([script.textContent]); // code 转换为 blob 类型
const url = window.URL.createObjectURL(blob); // 将 blob 创建为 url
const worker = new Worker(url); // 创建 Worker 执行脚本内容
worker.onmessage = (msg) => { // 监听 worker 通信
if (msg.data === "close") { // 如果内部已经结束则停止 setTimeout
clearTimeout(time_out)
}
}
worker.addEventListener('error', function (event) {// 监听错误
clearTimeout(time_out)
return event
});
time_out = setTimeout(() => { // 指定时间后强制结束线程
worker.terminate();
console.error("执行超时")
}, timeout);
}
```
user8341
2020-11-17 17:40:49 +08:00
不错。只有 JavaScript 能在浏览器执行吧?
VWMMWV
2020-11-17 17:43:44 +08:00
很好,但我选择新建 html,在 script 里执行
xiyuesaves
2020-11-17 17:43:47 +08:00
@user8341 是的,只有 js 语法才能正常执行
xiyuesaves
2020-11-17 17:44:47 +08:00
@VWMMWV 只是提供一个更便捷的方式啦,其实直接把代码复制到控制台都能执行的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/726234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX