2012-04-15 85 views
4

我正在创建Safari扩展。我如何手动将新选项卡/窗口设置为我选择的URL?我使用了一些逻辑的这个职位,以确保我只接管用户创建的标签/窗口Safari extension: Event for a completely new tab?在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,但似乎没有做任何事情,当我打开一个新选项卡时,我仍然可以看到“热门网站”页面。

在此先感谢!

回答

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

这将改变在新标签中打开的所有网址到雅虎...... – 2014-06-14 07:03:12

+0

尽管@canisbos(有用)的答案确实有用,但它确实没有让人困惑,它确实与'e'交换了'tab',这就是在示例的其余部分中使用。所以,如果你想保持与示例一致,使用'function takeOverTab(e){e.url =“http://www.yahoo.com”;}' – 2014-10-19 20:57:36

+0

不,不,泰勒,你不这样做。 e是整个活动。标签是e.target,这是选项卡。 这只是要求麻烦,为variable.property指针使用相同的变量名称。 – 2016-09-28 20:39:12

相关问题