Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我应该如何在Safari扩展中使用现有的JavaScript库?_Javascript_Safari_Safari Extension - Fatal编程技术网

我应该如何在Safari扩展中使用现有的JavaScript库?

我应该如何在Safari扩展中使用现有的JavaScript库?,javascript,safari,safari-extension,Javascript,Safari,Safari Extension,我想在Safari扩展中使用,以便该扩展可以捕获键盘快捷键。但它似乎不起作用。我正在开发一个小的扩展名,它完全位于Global.html文件中 到目前为止,我已经尝试: 注入脚本 或者有没有其他方法可以让键盘快捷键触发Safari扩展中的某些内容?我只需要一个(它涉及Cmd和Shift) 使用解决方案更新 对于未来的人(我们有喷气背包吗?),这是我在注入端脚本中所做的: window.addEventListener('keydown', handleKeydown, false); fun

我想在Safari扩展中使用,以便该扩展可以捕获键盘快捷键。但它似乎不起作用。我正在开发一个小的扩展名,它完全位于Global.html文件中

到目前为止,我已经尝试:

  • 注入脚本
  • 或者有没有其他方法可以让键盘快捷键触发Safari扩展中的某些内容?我只需要一个(它涉及Cmd和Shift)

    使用解决方案更新

    对于未来的人(我们有喷气背包吗?),这是我在注入端脚本中所做的:

    window.addEventListener('keydown', handleKeydown, false);
    
    function handleKeydown(e) {
        // If <my JS keyCode of choice> is pressed down, checks it Cmd and Shift were pressed
        if (e.keyCode == <my JS keyCode of choice> && e.metaKey && e.shiftKey) {
            safari.self.tab.dispatchMessage('<someMessage>');
        }
    }    
    

    如果您只需要一个快捷方式,那么完全由您自己实现可能会更简单

    在注入脚本中:

    window.addEventListener('keydown', handleKeydown, false);
    
    function handleKeydown(e) {
        if(e.ctrlKey && !e.metaKey && !e.altKey && !e.shiftKey) {
            safari.self.tab.dispatchMessage('keyboard', e.which);
        }
    }
    
    这将检查控制键是否已按下,但其他修改器均未按下。然后,在按住控件的同时按下第二个键时,它会向全局页面发送一条消息

    然后在全局页面中:

    safari.application.addEventListener('message', handleMessage, false);
    
    function handleMessage(msg) {
        if(msg.name == 'keyboard') {
            console.log(msg.message);
            console.log(String.fromCharCode(msg.message));
        }
    }
    

    许多快捷方式,特别是使用Cmd/Ctrl的快捷方式,都是保留的,无法自定义。@dadav即使我的快捷方式目前没有任何作用,也无法使其工作?而捕鼠器在Safari网站上也能起作用。当然,Safari无法判断捕鼠器是否保留了按键。您的快捷方式是否可以通过运行网站的捕鼠器来实现?扩展中有快捷方式可用吗?@dandav是工作中的快捷方式。第二个例子与我尝试做的非常相似。它确实会在网站上被触发。@dandavis它看起来像是其他扩展使用了捕鼠器。它们比我的要复杂得多,我对这一切都不熟悉,所以我无法阅读它们来理解。也许你能帮忙。我没想到!但是我完全按照你说的去做了,结果没有用。控制台上没有打印任何内容。我尝试将其作为开始和结束脚本注入。但我相信你很接近。
    safari.application.addEventListener('message', handleMessage, false);
    
    function handleMessage(msg) {
        if(msg.name == 'keyboard') {
            console.log(msg.message);
            console.log(String.fromCharCode(msg.message));
        }
    }