在Firefox/Internet Explorer中杀死默认的CTRL-F搜索栏

Sex*_*ast 4 javascript browser events ctrl

我目前正在设计一个提供自定义搜索功能的网页.由于这可能会干扰浏览器提供的默认搜索栏CTRL- F,我们正在禁用该事件,以便不会弹出默认搜索栏,而是显示我们的搜索栏.

问题是,在Firefox和Internet Explorer中,与Chrome或Safari或Opera不同,搜索栏在所有选项卡中都是可共享的.因此,如果我在其他选项卡中,请执行CTRL- F弹出默认搜索栏,现在跳转到此页面,搜索栏仍然存在,这完全违背了我们的目的.

我知道这听起来不可能,但是,有没有办法杀死默认搜索栏,也就是说,通过JavaScript完全隐藏它?然后,当我们检测到用户正在进入我们的页面时,我们可能会这样做.

如果不可能,那么有什么方法可以禁用特定元素的默认搜索,比如说contenteditable div?这样,虽然CTRL- F迭代单词的页面,每按一次突出显示每个实例,ENTER该元素中的所有单词都被完全忽略了?

小智 6

沙盒脚本

您无法通过JavaScript控制页面中其他选项卡的行为或内容,因此无法实现.

基本上:实现这一目标的唯一方法是分叉源代码并创建自己的浏览器版本,为搜索栏提供自己的功能.对于IE,您可以为Web控件创建一个包装,例如.Net并分发,但在这里您将无法控制IE版本.

这将是一个有点极端的IMO,但在vanilla版本中,你无法绕过这个并且可以理解,因为这会引发一大堆安全问题.

扩展似乎是一种替代方法,但它们也受到安全保护,并且在这方面将受到限制,因此您将不会比以下更进一步 -

有限的浏览器行为控制

您可以覆盖ctrl+ f但这只能在运行脚本的选项卡上运行(我强烈反对在未经用户批准的情况下执行此操作,因为这会更改默认的浏览器行为).

举例来说:

document.onkeydown = function(e) {

    /// for IE
    e = e || event;
    var keyCode = (window.event) ? e.which : e.keyCode;

    /// check ctrl + f key
    if (e.ctrlKey === true && keyCode === 70) {
        e.preventDefault();

        console.log('Ctrl + f was hit...');

        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里在线演示

更新:对于Mac command键,这里已经回答:
如何通过JavaScript捕获Mac的命令键?.

  • 如果搜索栏在其他选项卡中打开,OP 特别询问如何阻止搜索栏,然后共享到他的选项卡。据我所知,您的回答并不能阻止这种情况。 (2认同)

jos*_*736 5

看起来你已经在监听Ctrl+ F按键并禁止默认行为.这是你可以去的.

换句话说,在回答你的问题是很简单NO.

查找页面搜索栏是浏览器chrome的一部分; 你无法通过DOM或其​​他方式访问它.浏览器不提供任何类型的API,允许页面以任何方式控制页面查找功能.您无法关闭已打开的查找栏.你不能让它被打开.您无法读取或控制搜索输入框中的内容.

您可以编写一个以某种方式控制页面搜索功能的扩展程序,但显然您必须说服用户安装它,并且您需要为每个要定位的浏览器使用一个.

坦率地说,每当我看到有人要求禁用或干扰默认浏览器行为时,通常都是误导,糟糕的主意.您可能认为您的搜索功能非常棒(毕竟,您编写了它),但您可能会以某种意想不到的方式限制用户.(如果没有看到确切的用例,我无法肯定地说,但这是一个很好的一般规则.)

如果您试图打败标准浏览器功能,那么您可能做错了.

  • Google Docs似乎能够在IE,FF和Chrome中实现这一目标 (5认同)