如何延迟或拦截导航更改,直到函数在使用 Chrome 扩展程序在 DOM 上完成



我正在使用Chrome扩展程序,并希望运行一个函数,从用户单击的元素生成选择器。

在静态页面上它正在工作,问题是,当用户单击 SPA 站点中的链接时,路由比函数更快,然后在函数生成选择器之前 DOM 更改。

到目前为止我尝试过:

  1. 我试图使用此扩展 API 拦截后台页面中的导航chrome.webNavigation.onBeforeNavigate.addListener(function callback).

它正确地拦截了它,但我找不到任何方法来延迟导航。导航仍照常进行。

  1. 我也尝试使用 webRequest 扩展 API 阻止请求,但在函数完成运行后我无法禁用阻止。(我不认为这是正确的方法(

我的问题:

  1. 是否可以延迟导航? js 中的 setTimeout 是异步的,因此不会以任何方式阻止导航。
  2. 在路由更改之前,
  3. 有没有其他方法可以等待函数完成运行(承诺无济于事,因为路由在解决之前仍然会发生(?

我可以建议你一个后备。

如果您在应用选择器生成功能之前保存元素 x 和 y 坐标,那么当它失败时,您可以返回到以前的路线并在具有保存的 x 和 y 坐标的元素上应用选择器生成吗?

仅当选择器生成功能是瓶颈时,它才可能起作用。