我在每个页面上都运行了一个内容脚本。它更新了页面的html,这似乎在更长的页面上花费更多的时间(脚本遍历DOM很多次)。在较长的页面上,脚本最多可能需要10-20秒才能完成,而且当需要太长时间时,Chrome会停止脚本,因为在这些页面上我只看到页面的一部分发生了变化。
奇怪的是,当我在代码中的某处添加几个警报时,将运行时分成几个部分,脚本运行完全正常并更改整个页面。但是,当删除警报时,脚本会再次过早停止,并且只有部分页面会发生更改。
我唯一的结论是,chrome会停止运行时间太长的脚本,所以我的问题是 - 这是真的吗?如果是这样 - 可以做些什么呢? (除了使用恼人的弹出警报)
我有另一个理论,脚本停止,因为当同时命令试图改变DOM时,某种程度上存在冲突。这更有意义吗?
有关架构的更多详细信息:后台页面从内容脚本中获取消息。此消息包含回调函数(实际更改HTML的函数)。然后,相对于页面的长度,从后台页面多次调用此函数。如果我在回调函数中插入一个警报,则每次调用都会运行而不会出现问题。但是,如果我将其删除,则仅进行后台页面中的第一次调用,并且进一步调用不执行任何操作(尽管后台页面代码仍在运行)。
答案 0 :(得分:0)
是的,通常会提示用户是否要继续等待或杀死该页面。
答案 1 :(得分:0)
如果JavaScript需要很长时间(因此会阻止主线程),Chrome会有一些限制,它会通知您花费太多时间。
您有两种选择:
答案 2 :(得分:0)
我发现了什么问题。我正在使用从内容脚本到后台html页面的消息给出的回调。此回调只能运行一次,因为发送到后台页面的每条消息只允许一个响应。
当我在回调函数中添加警报时,chrome中的某种错误会导致许多响应生效。
通过将邮件内容分解为多条消息来解决问题。