Safari扩展,在弹出窗口的新选项卡中打开URL

时间:2011-09-08 10:06:13

标签: safari-extension

我的扩展程序会打开globalpage.html的弹出窗口

safari.application.openBrowserWindow()

我想在主窗口的新选项卡中从弹出窗口打开一些网址。我没有

的访问权限
safari.extension.globalPage

safari.application.xxxxx

2 个答案:

答案 0 :(得分:4)

从您注入的脚本中,您需要向全局页面发送一条消息,告诉它打开一个新选项卡。

在注入的脚本中:

safari.self.tab.dispatchMessage('openUrlInNewTab', 'http://www.example.com/');

// the message name 'openUrlInNewTab' is arbitrary

在全局页面脚本中:

function handleMessage(msgEvent) {
    if (msgEvent.name == 'openUrlInNewTab') {
        safari.application.activeBrowserWindow.openTab().url = msgEvent.message;
    }
}

safari.application.addEventListener('message', handleMessage, false);

(Here's the relevant section Safari扩展程序开发指南。)

但是,如果你想在另一个窗口打开新标签而不是最前面的标签 - 在你的情况下可能是你的弹出窗口 - 你需要以某种方式识别另一个窗口。例如,在打开弹出窗口之前,您可以将活动窗口复制到变量,如下所示:

var targetWin = safari.application.activeBrowserWindow;

然后,当您想在其中打开新标签页时,请使用:

targetWin.openTab().url = msgEvent.message;

答案 1 :(得分:1)

这对我有用。 它链接到一个带有“myCommand”命令的工具栏项。 我不需要添加注入脚本,只需将其放在我的global.html文件中。

如果选项卡中没有加载URL,则会禁用,但我通过赞扬以“event.target.disabled ...”开头的行来关闭它。

<script type="text/javascript" charset="utf-8">
function performCommand(event)
{
    if (event.command === "myCommand") {
    safari.application.activeBrowserWindow.openTab().url = "http://www.yourdomain.com/";   
 }
}
function validateCommand(event)
{
    if (event.command === "myCommand") {
        // Disable the button if there is no URL loaded in the tab.
       // event.target.disabled = !event.target.browserWindow.activeTab.url;
    }
}

// if event handlers are in the global HTML page,
// register with application:
safari.application.addEventListener("command", performCommand, true);
safari.application.addEventListener("validate", validateCommand, true);
</script>