我尝试将简单的Chrome扩展程序移植到Safari扩展程序。它应该在用户打开新选项卡时显示本地HTML,但该文件的路径不应出现在URL栏中。
Chrome扩展程序的代码为:
的manifest.json
{
...
"chrome_url_overrides": {
"newtab": "main.html"
},
"permissions": [
"tabs"
]
}
main.html中
<html>
<head></head>
<body>
Hello World!
</body>
</html>
在Safari中,我得到的结果是在工具栏上创建一个按钮,重定向到URL。
如何实现相同的功能?我试图找到例子,没有运气。
答案 0 :(得分:2)
这可能无法可靠地完成。您可以使用在open
或safari.application
对象上触发的SafariBrowserWindow
事件来检测何时打开新标签页,但是您必须确保新标签页不会有一个页面立即加载到其中。你可以通过在新标签上听一个beforeNavigate
事件来做...但是有一些并发症。
如果选项卡保持真正空白,则不会立即触发beforeNavigate
事件,因此您可以使用超时停止侦听事件,然后继续加载您选择的页面。但新标签可能不会留空。他们可以显示“热门站点”页面(默认行为),他们可以显示用户指定的主页,也可以显示上一个选项卡中加载的页面。
在主页和同页的情况下,将在新选项卡上触发beforeNavigate
事件,其url
属性的值将是要加载的URL。是否劫持这些类型的新标签并将您自己的页面加载到它们中取决于您。
在热门网站的情况下,系统会在新标签上触发beforeNavigate
事件,但其url
属性将为null
。因此,您可能认为可以检测到该内容,然后在新选项卡中加载您选择的页面。但是,存在一个问题,因为当任何扩展在新选项卡中打开其中一个页面时,会发生同样的行为(带有空URL的beforeNavigate
事件)。因此,如果您使用空beforeNavigate
网址劫持所有标签,则其他扩展程序无法打开自己的网页。