在Safari Extension中设置新选项卡/窗口URL

时间:2012-04-15 22:28:08

标签: javascript safari-extension

我正在创建一个safari扩展。如何手动将新标签/窗口设置为我选择的URL?我使用了这篇文章中的一些逻辑来确保我只接管用户创建的标签/窗口Safari extension: Event for a completely new tab?

我设置了新的标签事件监听器:

safari.application.addEventListener("open", handleOpen, true);

使用它来处理打开的标签/窗口:

function handleOpen(e) {
    if (e.target instanceof SafariBrowserTab) {
        e.target.addEventListener('beforeNavigate', handleBeforeNavigate, false);
        setTimeout(function () {
            e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
            takeOverTab();
        }, 50);
    }
}

function handleBeforeNavigate(e) {
    e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
    if (e.url === null) {
        takeOverTab();
    }
}

function takeOverTab() {
window.location.href = "http://www.yahoo.com";
}

我可以在新的标签/窗口打开时发出警报,但我不知道如何实际浏览到网址。我尝试了window.location.href,但似乎没有做任何事情,当我打开一个新选项卡时,我仍然得到“顶级网站”页面。

提前致谢!

1 个答案:

答案 0 :(得分:4)

更改takeOverTab功能,如下所示:

function takeOverTab(tab) {
    tab.url = "http://www.yahoo.com";
}

修改函数调用以包含对选项卡的引用:

takeOverTab(e.target);

此外,在beforeNavigate处理程序中,您应添加e.preventDefault()以防止标签加载要加载的内容:

function handleBeforeNavigate(e) {
    e.target.removeEventListener('beforeNavigate', handleBeforeNavigate, false);
    if (e.url === null) {
        e.preventDefault();
        takeOverTab();
    }
}