如果完成需要很长时间,Chrome扩展内容脚本会停止吗?

时间:2010-11-28 01:45:24

标签: javascript google-chrome-extension

我在每个页面上都运行了一个内容脚本。它更新了页面的html,这似乎在更长的页面上花费更多的时间(脚本遍历DOM很多次)。在较长的页面上,脚本最多可能需要10-20秒才能完成,而且当需要太长时间时,Chrome会停止脚本,因为在这些页面上我只看到页面的一部分发生了变化。

奇怪的是,当我在代码中的某处添加几个警报时,将运行时分成几个部分,脚本运行完全正常并更改整个页面。但是,当删除警报时,脚本会再次过早停止,并且只有部分页面会发生更改。

我唯一的结论是,chrome会停止运行时间太长的脚本,所以我的问题是 - 这是真的吗?如果是这样 - 可以做些什么呢? (除了使用恼人的弹出警报)

我有另一个理论,脚本停止,因为当同时命令试图改变DOM时,某种程度上存在冲突。这更有意义吗?

有关架构的更多详细信息:后台页面从内容脚本中获取消息。此消息包含回调函数(实际更改HTML的函数)。然后,相对于页面的长度,从后台页面多次调用此函数。如果我在回调函数中插入一个警报,则每次调用都会运行而不会出现问题。但是,如果我将其删除,则仅进行后台页面中的第一次调用,并且进一步调用不执行任何操作(尽管后台页面代码仍在运行)。

3 个答案:

答案 0 :(得分:0)

是的,通常会提示用户是否要继续等待或杀死该页面。

答案 1 :(得分:0)

如果JavaScript需要很长时间(因此会阻止主线程),Chrome会有一些限制,它会通知您花费太多时间。

您有两种选择:

  1. 您可以将一些处理工作卸载到HTML5工作人员并在处理完成后将消息发回页面吗?
  2. 您可以将一些处理卸载到后台页面,并在处理完成后将消息请求发送回内容脚本吗?

答案 2 :(得分:0)

我发现了什么问题。我正在使用从内容脚本到后台html页面的消息给出的回调。此回调只能运行一次,因为发送到后台页面的每条消息只允许一个响应。

当我在回调函数中添加警报时,chrome中的某种错误会导致许多响应生效。

通过将邮件内容分解为多条消息来解决问题。