首页 > 解决方案 > 如何延迟或拦截导航更改,直到使用 Chrome 扩展在 DOM 上完成功能

问题描述

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

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

到目前为止我尝试了什么:

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

它可以正确拦截它,但我找不到任何延迟导航的方法。导航仍然照常进行。

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

我的问题:

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

标签: javascriptgoogle-chrome-extension

解决方案


我可以建议你一个后备。

如果您在应用选择器生成函数之前保存元素 x 和 y 坐标,它会起作用吗?所以当它失败时,您可以返回上一个路线并在保存了 x 和 y 坐标的元素上应用选择器生成?

It may work only if selector generation function is the bottleneck.


推荐阅读