javascript - 如何延迟或拦截导航更改,直到使用 Chrome 扩展在 DOM 上完成功能
问题描述
我正在使用 Chrome 扩展程序并希望运行一个从用户单击的元素生成选择器的函数。
在静态页面上它正在工作,问题是,当用户点击 SPA 站点中的链接时,路由比函数更快,然后 DOM 在函数生成选择器之前发生变化。
到目前为止我尝试了什么:
- 我尝试使用此扩展 API 拦截后台页面中的导航
chrome.webNavigation.onBeforeNavigate.addListener(function callback).
它可以正确拦截它,但我找不到任何延迟导航的方法。导航仍然照常进行。
- 我还尝试使用 webRequest 扩展 API 阻止请求,但在函数完成运行后我无法禁用阻止。(我不相信这是正确的方法)
我的问题:
- 是否可以延迟导航?js 中的 setTimeout 是异步的,因此不会以任何方式阻止导航。
- 有没有其他方法可以在路由更改之前等待函数完成运行(承诺无济于事,因为路由在解决之前仍然发生)?
解决方案
我可以建议你一个后备。
如果您在应用选择器生成函数之前保存元素 x 和 y 坐标,它会起作用吗?所以当它失败时,您可以返回上一个路线并在保存了 x 和 y 坐标的元素上应用选择器生成?
It may work only if selector generation function is the bottleneck.
推荐阅读
- facebook - 为什么 token_for_business 字段未显示在 signed_request 上
- php - php中的Jwt身份验证
- java - 从 Firebase 检索位置数据未进入 MapActivity
- html - href 不适用于导航链接折叠类
- javascript - 更改字体真棒图标 onclick reactjs
- vba - 如何使用 VBA 偏移 MS PowerPoint 中的背景图像?
- javascript - 无论路径如何, new Audio("./mysound.mp3") 如何工作?
- javascript - 如何使用 javascript jquery 获取 tbody 标题?
- node.js - 当应用程序输出通过管道传输时,不会为 ctrl-c 按键调用 SIGINT、beforeExit 和 exit 事件处理程序
- javascript - 如何格式化和显示没有时区的日期?