【问题标题】:Set New tab/window URL in Safari Extension在 Safari 扩展中设置新选项卡/窗口 URL
【发布时间】:2012-04-17 05:34:41
【问题描述】:

我正在创建一个 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";
}

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

提前致谢!

【问题讨论】:

    标签: javascript safari-extension


    【解决方案1】:

    如下更改您的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();
        }
    }
    

    【讨论】:

    • 所以没有人会在这里感到困惑,即使@canisbos 的(有用的)答案确实有效,它确实可以将tabe 互换,这是示例其余部分中使用的内容。因此,如果您想与示例保持一致,请使用function takeOverTab(e) {e.url = "http://www.yahoo.com";}
    • 不不不,泰勒,你不要那样做。 e 代表整个事件。 tab是e.target,也就是tab。为 variable.property 指针使用相同的变量名只是自找麻烦。
    猜你喜欢
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2017-07-11
    • 2013-04-17
    • 2012-01-28
    • 2011-06-21
    相关资源
    最近更新 更多