4

我正在创建一个 Safari 扩展程序。如何手动将新选项卡/窗口设置为我选择的 URL?我使用了这篇文章中的一些逻辑来确保我只接管用户创建的选项卡/Windows Safari 扩展:全新选项卡的事件?

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

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";
}

我可以在打开新选项卡/窗口时发出警报,但我一生都无法弄清楚如何实际浏览到 url。我尝试了 window.location.href 但这似乎没有任何作用,当我打开一个新标签时,我仍然会得到“热门网站”页面。

提前致谢!

4

1 回答 1

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();
    }
}
于 2012-04-16T21:34:41.860 回答