Google chrome extension Safari扩展:当用户打开新选项卡时,显示本地HTML,而不是默认页面或空白页面

Google chrome extension Safari扩展:当用户打开新选项卡时,显示本地HTML,而不是默认页面或空白页面,google-chrome-extension,safari,safari-extension,Google Chrome Extension,Safari,Safari Extension,我正在尝试将一个简单的Chrome扩展移植到Safari扩展。当用户打开一个新选项卡时,它应该显示一个本地HTML,但是文件的路径不应该出现在URL栏中 Chrome扩展的代码为: manifest.json { ... “chrome\u url\u覆盖”:{ “newtab”:“main.html” }, “权限”:[ “选项卡” ] } main.html 你好,世界! 在Safari中,我得到的结果是在工具栏上创建一个按钮,重定向到URL 如何实现相同的功能?我试图找到一些例子,但

我正在尝试将一个简单的Chrome扩展移植到Safari扩展。当用户打开一个新选项卡时,它应该显示一个本地HTML,但是文件的路径不应该出现在URL栏中

Chrome扩展的代码为:

manifest.json

{
...
“chrome\u url\u覆盖”:{
“newtab”:“main.html”
},
“权限”:[
“选项卡”
]
}
main.html


你好,世界!
在Safari中,我得到的结果是在工具栏上创建一个按钮,重定向到URL


如何实现相同的功能?我试图找到一些例子,但运气不佳。

这可能无法可靠地做到。您可以使用在
safari.application
或在
SafariBrowserWindow
对象上触发的
open
事件检测何时打开新选项卡,但您必须确保新选项卡不会立即加载页面。您可以通过在“新”选项卡上的“导航”之前侦听
事件来实现这一点……但随后会出现一些复杂情况

如果选项卡仍然为空,则不会立即触发任何
beforeNavigate
事件,因此您可以使用超时停止侦听事件,然后继续加载所选页面。但新的选项卡可能不会保持空白。它们可以显示顶部站点页面(默认行为),可以显示用户指定的主页,也可以显示在上一个选项卡中加载的页面

在主页和相同页面的情况下,将在新选项卡上触发
beforeNavigate
事件,其
url
属性的值将是要加载的url。是否劫持这些类型的新选项卡并将您自己的页面加载到其中取决于您

在Top Sites案例中,新选项卡上将触发
beforeNavigate
事件,但其
url
属性将为
null
。因此,您可能认为可以检测到这一点,然后在新选项卡中加载您选择的页面。但是,有一个问题,因为当任何扩展在新选项卡中打开自己的一个页面时,都会发生相同的行为(带有空url的
beforeNavigate
事件)。因此,如果您在导航之前劫持所有带有空
URL的选项卡,您将使其他扩展无法打开自己的页面