如果有人在某处回答了这个问题,请原谅我,但我在常见问题解答或自述文件中找不到它。
我经营着一个很多程序员都在使用的网站。 有些人使用 Vimium,看起来扩展程序试图升级我页面上某些元素的编辑。 这导致了一些很难追踪的棘手 JS 错误以及很多用户痛苦,因为他们没有意识到失败是由于我们的代码和 Vimium 之间的冲突造成的。
有没有办法用“如果你正在运行 Vimium,请不要增强这个元素”来标记元素? 感谢您提前回复。
@vincentwoo ......目前没有。 这样的功能需要仔细考虑。
你愿意考虑这个功能吗? 如果是这样,您能否说出您的一些主要担忧是什么? 我显然不想踩到任何脚趾,但我确实想为安装了 Vimium 的用户(这是一大群人)提供更好的用户体验。
+1 这将是一个非常有用的补充。
您可以在 DOM 就绪/窗口加载时发送假的unload
消息 - 如果只有 Vimium 已初始化。
这是我的示例: https://jsfiddle.net/2L36ypys/ ,您会看到您不能使用f
来激活提示。
这自提交 adce73cb68f7ca3e3e01ca6fbb08a1008c9c8b90 (2016/04/05) 以来有效。
顺便说一句,您能否提供更多线索,我们可能会解决此类冲突。
我自己不是 vimium 用户,所以我明天会安装它并尝试为您提供更具体的错误报告。 谢谢你的片段。
事实上,根据https://jsfiddle.net/2L36ypys/1/ 中的测试,当页面为"loading"
时,我们可以从“主机”环境中发送这样的消息,因为 Vimium 安装了它的unload
在所有其他页面脚本之前的事件侦听器。
但是我的Vimium++没有使用这个监听器,也没有简单的方法可以通过页面脚本来销毁它。
所以我期待你的搜索。 一个可以重现错误的测试页面就可以了。 非常感谢。
与此相关,有一个 2 年历史的项目来检测用户是否在使用 Vimium,这里可能有用: https :
@pimlottc该扩展已经有 1 年或 2 年没有工作了,因为 Vimium 使用“shadowDOM”来隐藏其节点。
我无法完全重现 vimium 用户在我的网站上遇到的问题(可能是因为我个人不使用 Vim)。 是否仍然需要向元素添加某种特定于 vimium 的 CSS 类以要求扩展不增加它?
是否仍然需要向元素添加某种特定于 vimium 的 CSS 类以要求扩展不增加它?
我不确定这是个好主意。
如果 Vimium 在某些站点上根本不起作用,并且用户已经可以自己在您的站点上禁用 Vimium,那么肯定会导致用户混淆,请参见此处。
此外,如果我们追求你的想法,那么我们可能还需要一种机制让用户重新启用 Vimium。
好吧。 有没有办法让我们至少知道,如果Vimium已启用? 问题是当事情因奇怪的交互而中断时,用户会责怪我们。 我的服务已经使用了一个非常复杂的编辑界面 (CodeMirror),所以我希望能够做一些事情。
如果 Vimium 至少可以以某种方式在 DOM 上添加一个工件,那么至少像@vincentwoo所指的网站可以_使用户知道_用户安装了 Vimium,并且他们可以向用户显示一条消息,提醒他们可能存在冲突行为当将网页中的复杂 UI 与 Vimium 提供的所有内容结合起来时,甚至可以帮助配置有问题的应用程序或 Vimium 以解决它们。
如果 Vimium 至少可以以某种方式在 DOM 上添加一个工件......
我们在每个(顶级)页面上预加载 Vomnibar。 我想我们可以为它分配一个合适的类或 id。
那肯定会有帮助!
@smblot-github 我的想法是,Vimium 将其影子主机节点从<div>
重命名为另一个名称,例如<vimium-ui>
,然后它就足以搜索<html>
的孩子对于这个标签名称。 我认为这个自定义元素标签名称不会与其他网站的名称相同。
我的想法是 Vimium 将其影子主机节点从
<div>
重命名为另一个名称,例如<vimium-ui>
,然后只需在<html>
的子节点中搜索此标签名称即可.
由于这个 Chromium 问题,目前这是不可能的。
您可以检测到我们可通过网络访问的资源。 例如:
var xhr = new XMLHttpRequest(),
vimiumEnabled = false;
xhr.onerror = xhr.onload = function(){vimiumEnabled = xhr.responseText !== "";};
xhr.open("GET","chrome-extension://dbepggeogbaibhgnhhndojpepiihcmeb/content_scripts/vimium.css");
xhr.send()
@mrmr1993我不想创建一个“自定义”元素,只是一个带有自定义标签名称的HTMLElement
。 一个HTMLElement
节点就像一个HTMLUnknownElement
但仍然支持附加一个 shadowRoot。
只是一些想法。
网站管理员应该有办法禁用 Vimium 吗?
网站所有者应该有办法检测 Vimium 吗?
我不确定网站管理员是否应该具有这两种能力,但如果他们这样做,它可能不应该依赖于巧合的实现细节。 一个标准化的解决方案,比如#2532 可能是要走的路。
例如,一个页面可能包含以下内容:
<meta name="keybinding" disable="suggest")">
<script>
document.querySelector('meta[name="keybinding"]').addEventListener('detect', () => {
console.log('hi vimium user');
});
</script>
这让站长
Vimium 将不得不
理论上,其他按键绑定扩展也可以实现这个接口,这样网站管理员就不必分别检测 Vimium、cVim、Surfing Keys、Saka Key、VimFx、Vimari 等。
我也在寻找检测 vimium 的解决方案。 @eejdoowad的提议看起来很棒。 同时,我同意@gdh1995 ,具有特殊 id/classname 的<div>
将立即解决现在的问题。
从 vimium v1.59 开始,下面是一个工作功能,虽然不完全可靠,但由于缺乏可靠的标识符,如果您有其他扩展程序以 vimium 的方式插入 shadowDom,那么它就会中断。
function hasVimium () {
try {
const shadowRoot = document.querySelector('html > div').shadowRoot;
return Boolean(shadowRoot.querySelector('style').textContent.match(/vimium/));
} catch (e) {
return false;
}
}
我只想说,我会担心是否实施了内置检测机制。 指纹当然总是可以通过改变 DOM 的插件来完成,除非禁止网站 javascript,但至少让我们不要给人们一个简单的数据点目标来跟踪......
我们可以有一种机制,我们不检测 Vimium,但可以在我们的页面上添加一个元标记,以便在 Vimium 用户碰巧使用该页面时显示一条消息,并提供禁用选项。 因此,Vimium 可以避免琐碎的检测,而且我们不一定要了解有关用户的任何信息。
由于https://github.com/philc/vimium/issues/2504之类的错误,这对于我正在处理的应用程序来说非常必要。 总结是,随着 vimium 的运行,网站将开始响应,并且随着事件处理程序的堆积而变得越来越慢。
如果网站可以检测到:
如果网站可以以用户清楚的方式礼貌地禁用 vimium(这样 vimium 图标不再是蓝色),那就太好了
@mgsloan你能提供一个示例页面吗? 自 #2504 以来,插入模式的处理方式发生了重大变化。
(我不确定单方面禁用 Vimium 的网站。这可能会令人困惑。)
@smblott-github 嗨,感谢您的回复! 事实上,性能问题似乎已经消失了。 伟大的!
存在一个问题,即某些输入行为与禁用 vimium 时有很大不同。 我会询问,看看我们是否可以分享网址。
你好呀! 项目维护者是否可以接受哪些方法? 我们愿意付出一些时间来完成这项工作(相当多的 vimium 用户使用 CoderPad)但不想踩到任何脚趾。
我认为 Vimium 期望的关键点是所有用户都可以毫无痛苦或烦恼地使用它。
由于您的站点有一些与 Vimium 不同的特殊操作,包括输入框上的esc ,Vimium 是否应该允许在其选项页面上“排除” <esc>
?
如果是这样,您的用户可以手动配置它并恢复站点的操作(目前,似乎不能排除<esc>
)。
但我不喜欢 Vimium 在满足特殊条件时禁用自身的想法。 这对 Vimium 的价值是有害的。
至于发布Vimium的版本,我的建议是:
<meta>
标签,由 Vimium 创建并包含一些诸如“Vimium”之类的词检查顶级 div 似乎不再起作用,因为在用户执行某些操作之前它不再安装。
换句话说,在页面加载时,没有可以依赖的神器
最有用的评论
只是一些想法。
网站管理员应该有办法禁用 Vimium 吗?
网站所有者应该有办法检测 Vimium 吗?
我不确定网站管理员是否应该具有这两种能力,但如果他们这样做,它可能不应该依赖于巧合的实现细节。 一个标准化的解决方案,比如#2532 可能是要走的路。
例如,一个页面可能包含以下内容:
这让站长
Vimium 将不得不
理论上,其他按键绑定扩展也可以实现这个接口,这样网站管理员就不必分别检测 Vimium、cVim、Surfing Keys、Saka Key、VimFx、Vimari 等。