Javascript 在Safari扩展中设置新选项卡/窗口URL

Javascript 在Safari扩展中设置新选项卡/窗口URL,javascript,safari-extension,Javascript,Safari Extension,我正在创建一个safari扩展。如何手动将新选项卡/窗口设置为我选择的URL?我使用了这篇文章中的一些逻辑来确保我只接管用户创建的选项卡/窗口 我设置了我的新选项卡事件侦听器: safari.application.addEventListener("open", handleOpen, true); 使用此选项处理打开的选项卡/窗口: function handleOpen(e) { if (e.target instanceof SafariBrowserTab) {

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

我设置了我的新选项卡事件侦听器:

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,但似乎没有任何效果,当我打开一个新标签时,我仍然会看到“热门网站”页面


提前谢谢

如下更改您的
takevertab
功能:

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();
    }
}

因此,这里没有人会感到困惑,即使@canisbos”(有用的)答案确实有效,但它确实会将
tab
e
交换,这就是本例其余部分所使用的。因此,如果您想与示例保持一致,请使用函数takevertab(e){e.url=”http://www.yahoo.com“;}不,不,泰勒,你不能那样做。e代表整个事件。tab是e.target,即选项卡。为variable.property指针使用相同的变量名只会带来麻烦。