10
4

5 回答 5

2

我没有使用过这个jsandbox脚本,但它似乎有你想要的。

于 2010-09-15T14:17:45.353 回答
1

您可以在主窗口中设置超时,在 10 秒后停止/删除脚本。然后你只需要在脚本完成时清除超时(只需在 iframe 脚本中添加这样的一行:window.frames[0].clearTimeout(window.frames[0].timeoutName)--我不知道它是否有效,但它应该)

于 2010-09-12T16:07:02.140 回答
1

如果一个脚本在页面上冻结,其他脚本将不会继续运行。因此,如果不使用自定义插件或其他东西,就无法检测另一个脚本是否已停止运行。浏览器不以这种方式使用多线程。

于 2010-09-11T23:56:49.533 回答
0

我不知道这是否会完全有效,您可以通过一些修补来获得类似的东西。我认为您正在接受文本 JavaScript 然后对其进行评估,对吗?您可以解析或什至只使用正则表达式将所有 for、for..in、while 和函数声明的调用替换为函数调用,然后一些逻辑调用您的代码并确定它是否已运行 10 秒。如果有,它将返回;或打破;或者其他的东西。之后代码可能会崩溃并可能开始抛出错误,但至少脚本会停止。

于 2010-09-16T00:14:03.073 回答
0

我认为这在很大程度上取决于脚本以及浏览器如何处理 iframe 中的脚本。

假设 iframe 中有一段时间(true)。

浏览器可能会锁定或使选项卡崩溃(就像 Chrome 所做的那样),或者它可能会锁定 iframe。如果它锁定或崩溃选项卡,除了尝试对脚本进行静态分析以查找可能有问题的语句之外,您无法使用 JS 本身来阻止它(静态分析以查找像这样有问题的脚本永远不会万无一失)

假设浏览器只锁定 iframe 或执行其他操作,同时仍允许主页中的脚本执行操作,则在一段时间后删除 iframe 是一种选择。

浏览器也可能会显示“脚本很慢”弹出窗口。在这种情况下,它很可能要么完全关闭整个选项卡中的所有脚本,要么只关闭 iframe 中的所有脚本。如果只是 iframe,则选项卡中的其他脚本仍然可以在预定义的时间段后清理它。

另一种选择是在单独的运行时预先评估脚本,您可以自己检测类似的事情。您可以在 Rhino 中运行脚本,并确定处理时间是否太长,或类似的东西。

于 2010-09-11T23:53:51.663 回答