我的扩展程序会打开globalpage.html的弹出窗口
safari.application.openBrowserWindow()
我想在主窗口的新选项卡中从弹出窗口打开一些网址。我没有
的访问权限safari.extension.globalPage
或
safari.application.xxxxx
答案 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>