Javascript 什么';这个简单的Safari扩展代码有什么问题?

Javascript 什么';这个简单的Safari扩展代码有什么问题?,javascript,jquery,safari,Javascript,Jquery,Safari,我正在创建一个Safari扩展,它将保留在Safari的菜单栏中,单击后,它将打开包含特定字符串的所有链接。但是,它不起作用 这就是我的extension builder屏幕的外观: 我没有设置任何外部脚本,因为我的HTML文件中有脚本,因为我只希望它在单击时运行 我有一个global.html页面,其中包含以下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/

我正在创建一个Safari扩展,它将保留在Safari的菜单栏中,单击后,它将打开包含特定字符串的所有链接。但是,它不起作用

这就是我的extension builder屏幕的外观:

我没有设置任何外部脚本,因为我的HTML文件中有脚本,因为我只希望它在单击时运行

我有一个global.html页面,其中包含以下代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <script type="text/javascript" src="jquery.js"></script>
    </head>
    <body>
        <script>
            safari.application.addEventListener("comnand", performCommand, false);

            Function performCommand(event) {  
                if (event.command == "open-designs") {  
                    $(document).ready(function() {
                        $('a[href*="/Create/DesignProduct.aspx?"]').each(function() {
                            window.open($(this).attr('href'),'_blank');
                        });
                    });
                }  
            }
        </script>
    </body>
</html>

safari.application.addEventListener(“comnand”,performCommand,false);
函数性能命令(事件){
如果(event.command==“打开设计”){
$(文档).ready(函数(){
$('a[href*=“/Create/DesignProduct.aspx?”)。每个(函数(){
window.open($(this.attr('href'),'u blank');
});
});
}  
}
这不管用吗?我可以混合使用jQuery和JS编写,因为jQuery就是JS?这不是我瞄准链接的方式吗

  • 我清楚地看到,
    $(document).ready()
    函数位于另一个函数中。这从本质上减轻了对
    $(document).ready()的需要,前提是您只在DOM和jQuery完全加载后调用该函数

    重新排列代码,以便在加载DOM和jQuery后仅添加事件侦听器这就是您使用的
    $(document).ready()
    回调函数

  • 此外,对于
    .each()
    的回调函数,我还看到了一个问题。该函数需要处理两个参数:索引和它引用的元素。对
    each()
    的调用将迭代元素集合。对于进入回调函数的每个元素,其索引都作为参数传递,同时也作为位于该索引处的元素本身传递。有关更多信息,请查看

  • 您可以使用
    $(document).ready()
    回调来指示您的DOM已经就绪,并且jQuery已经初始化。一旦一切就绪,就可以设置事件侦听器。
    在添加侦听器之前,无法调用函数
    performCommand()

    问题在于,您的扩展全局页面无法直接访问当前加载页面的DOM。为了能够实现您所需要的,您必须使用和

    例如,您的全局视图将如下所示:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
        <head>
            <script type="text/javascript" src="jquery.js"></script>
        </head>
        <body>
            <script>
                $(document).ready(function() {
                    safari.application.addEventListener("command", performCommand, false);
                });
    
                function performCommand(event) {  
                    if (event.command == "open-designs") { 
                        safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("open-designs", "all");
                    }  
                }
            </script>
        </body>
    </html>
    

    看起来此代码正在尝试为引用
    DesignProduct.aspx
    的每个
    标记打开一个新选项卡。。。它到底应该做什么?这正是它想要做的。我希望它能找到页面上包含特定字符串的每一个href,并在新选项卡中打开所有这些href。我不认为“comnand”是一个可以订阅的有效事件。检查那里的拼写错误。此外,JS区分大小写。“Function”应该是带有小写字母“f”的“Function”。对于每个,索引和元素代表什么?这让我很困惑。@dou,我做了一个编辑,试图澄清这一点。如果你需要更多的解释,请不要犹豫。谢谢你的帮助,所有的编辑显然都代表了这一点,我真的很感激。然而,即使理解了它们,代码似乎仍然不起作用。我收集的选择器是否正确?这将是使用一些
    console.log()
    或一些
    alert()
    来查看代码的确切位置的最佳时机。。。看看我的编辑…@DougSmith:你纠正了“command”的拼写错误了吗?您的代码可能没有执行任何操作,因为您尚未实际订阅任何有效的事件。即使使用该代码,它似乎也不起作用。下面是我想要匹配的一个a标签的外观<代码>
    但我似乎仍然无法让它工作。而且,我犯了愚蠢的错误。现在它工作得很好,谢谢你。我很高兴你最终成功了。你的“愚蠢错误”是出现在页面上还是出现在脚本中?我也要非常感谢你,Alex,因为我也被困在这里,而且效果很好:)
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
        <head>
            <script type="text/javascript" src="jquery.js"></script>
        </head>
        <body>
            <script>
                $(document).ready(function() {
                    safari.application.addEventListener("command", performCommand, false);
                });
    
                function performCommand(event) {  
                    if (event.command == "open-designs") { 
                        safari.application.activeBrowserWindow.activeTab.page.dispatchMessage("open-designs", "all");
                    }  
                }
            </script>
        </body>
    </html>
    
    function extensionname_openAll(event)
    {
        if (event.name == 'open-designs')
        {
            $('a[href*="/Create/DesignProduct.aspx?"]').each(function(index,elem) {
                window.open($(elem).attr('href'),'_blank');
            });
        }
    }
    safari.self.addEventListener("message", extensionname_openAll, true);