0

嗨,最好的同事,

目前我正在创建一个野生动物园书签并运行到以下问题。我创建了一个上下文菜单项并希望表现如下:

如果用户右键单击页面中的链接并单击此上下文项,它应该获取此链接的 href 属性并在 iframe 中打开一个弹出窗口。

我该如何解决这个问题?

现在我已经获得了 href 属性,但我怎样才能打开一个弹出窗口?

我的结束脚本:default.js

document.addEventListener("contextmenu", handleContextMenu, false);

function handleContextMenu(event){  
    if(event.target.nodeName === "A"){
        var url = event.target.href;
        safari.self.tab.setContextMenuEventUserInfo(event, url);
    }
}

我的 global.html

safari.application.addEventListener("command", performCommand, false);

function performCommand(event) {
if (event.command !== "DoAddSymbaloo")
        return;

        var u = event.userInfo;

}

我怎样才能解决这个问题?提前Tnx。

4

1 回答 1

3

您将无法将弹出框的 URL 设置为 Web URL(它必须是safari-extensionURL),但您可以拥有一个仅包含 iframe 的弹出框,并告诉弹出框在 iframe 中加载 URL .

最简单的方法是在弹出框本身中有一个“命令”事件的侦听器(您可以使用 Extension Builder 或扩展 API 创建它;如果您需要复习,请阅读文档)。

safari.application.addEventListener("command", function (evt) {
    if (evt.command == 'DoAddSymbaloo') {
        document.querySelector('iframe').src = evt.userInfo;
        // now let's show the popover
    }
}, false);

现在你必须显示弹出框。为了使弹出框完全可见,它需要附加到工具栏项。我假设您已经使用 Extension Builder 或 API 完成了这项工作。以编程方式显示弹出框的方法是showPopover在其工具栏项上使用该方法。因此,首先您必须找到已将弹出框附加到的工具栏项。从弹出窗口的脚本中:

var myToolbarItem = safari.extension.toolbarItems.filter(function (ti) {
    return ti.popover == safari.self;
})[0];

这只是说,“找到弹出框与我相同的工具栏项,并将该工具栏项分配给变量myToolbarItem。”

如果您愿意,并且如果弹出框仅附加到一个工具栏项,而不是将找到的工具栏项分配给myToolbarItem,您可以将其设置为弹出框对象的属性,从弹出框的角度来看是safari.self

safari.self.toolbarItem = safari.extension.toolbarItems.filter(function (ti) {
    return ti.popover == safari.self;
})[0];

这将提供一种方便的方法来从脚本中的任何位置或从全局页面获取与弹出框关联的工具栏项。

现在,结合这些东西:

safari.self.toolbarItem = safari.extension.toolbarItems.filter(function (ti) {
    return ti.popover == safari.self;
})[0];

safari.application.addEventListener("command", function (evt) {
    if (evt.command == 'DoAddSymbaloo') {
        document.querySelector('iframe').src = evt.userInfo;
        safari.self.toolbarItem.showPopover();
    }
}, false);

(为简化最终脚本而进行了编辑。)

于 2013-10-16T15:15:11.530 回答