题
编写 Safari 扩展的最佳方式是什么?我已经为 Firefox 编写了几个 XUL 扩展,现在我想为 Safari 编写它们的版本。有没有一种方法可以让您向浏览器 UI 添加按钮或表单,因为输入管理器或服务菜单无法实现这一点?
解决方案
随着Safari 5.0的发布,苹果发布了新的扩展框架供开发者使用。在功能上,它看起来类似于 Firefox 扩展框架,允许使用 javascript 和 html 5 自定义按钮、工具栏、上下文菜单、注入
更多内容请参见此链接
其他提示
Safari 插件开发并非易事。该界面是用 Objective-C 编写的,其中大部分甚至不是 WebKit 的一部分(因此您看不到源代码),但有一些机制可以检查和修补正在运行的应用程序的对象层次结构。它需要了解 Cocoa 和 Objective-C,但不能更低。
这是我在流程书签中的高级概述 http://livingcode.org/2006/tab-dumping-in-safari. 。它介绍了使用 Python 和工作(可能是过时的)代码创建 Safari 插件。您可以使用任何具有 Objective-C 绑定的东西来代替 Python。
它有两个主要部分:
您需要将代码附加到正在运行的 Safari。这通常使用 SIMBL 完成 http://www.culater.net/software/SIMBL/SIMBL.php.
一旦你进去了,你需要弄清楚要修补什么。有一个关于逆向 Cocoa 应用程序的教程 http://www.culater.net/wiki/moin.cgi/CocoaReverseEngineering, ,它链接到最重要的工具 class-dump http://www.codethecode.com/projects/class-dump/ (维基百科上的链接已损坏)。类转储为您提供了 Safari 类的完整层次结构,您可以通过名称猜测具体需要修补的内容。这是一种非常试错的模式。
阅读上面的链接将为您提供该项目的范围。
最近情况发生了变化。Apple 现在提供了一个扩展 API,作为 Safari 5 的一部分。您可以了解更多信息 苹果网站 并由 加入 Safari 开发者计划.
Safari 的扩展必须经过数字签名,但您可以从 Apple 免费获取签名证书。这是将您的扩展程序引入 Safari 的合法方法,而无需诉诸黑客手段,而每次 Apple 更新 Safari 时,黑客手段都可能会被破坏。
似乎没有人提到 Safari 实际上确实支持真正的插件,而输入管理器 hack 绝对不支持。
《WebKit插件编程专题》 http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/
这就是对 PDF 和 Flash 内容的支持等功能的实现方式。看看你的内部 /Library/Internet Plug-ins/
目录查看示例。
当然,它有其固有的局限性,就UI修改而言,你可能无法完成你所希望的事情。Safari 插件无法完成输入管理器 hack 所能完成的所有操作,但它们可以在任何地方的 WebKit 以及操作系统的未来版本中运行。 笔记: Snow Leopard 上的 Safari 默认为 64 位,因此输入管理器不起作用。我丢了 Safari 广告拦截 已经...:-( 我很乐意看到它被重写为一个真正的插件。
有没有一种方法可以让您向浏览器 UI 添加按钮或表单,因为输入管理器或服务菜单无法实现这一点?
实际上,使用InputManager,它 会 有可能。SIMBL 是 Safari 扩展的常用技术,它只是 InputManager 的包装器——它代表 S市场 我输入 中号阿纳格 乙昂德尔 L船长。您可以将内容添加到菜单栏、工具栏、对话框、任何地方,只需扩展 Safari 的现有类即可。
也就是说,为 Safari 编写扩展不仅不简单,正如 æon 所说,而且完全不受支持。有一些相对流行的扩展,例如 Inquisitor(最近被雅虎收购)和 Google 的 Gears,但在大多数情况下,它与 Firefox 的扩展非常不同,后者是一种官方支持的、广泛使用的技术。
您肯定还想考虑特殊的情况 Leopard 上输入管理器的限制.
另外,需要注意的是 - Apple 表示,从 Leopard 开始,InputManager 受到严格限制,并且不会在 Apple 的 64 位应用程序中运行 Leopard 发行说明. 。考虑到 Snow Leopard 中的大多数应用程序都是 64 位的(大概包括 Safari),这一点尤其有趣。Apple 肯定是在试图消除 InputManager 作为覆盖和扩展功能的载体。Safari 迫切需要一种扩展机制。
Safari 扩展不需要获得苹果的批准。你只需拥有一个开发者证书(免费)来制作它们,但你可以传递它们,尽管苹果正在制作扩展库,但你不必通过那里分发它。正如您所看到的,您今天已经可以尝试很多扩展。该证书只是确保它没有被篡改。
如果您想查看现有扩展以了解其完成方式,请下载它或从 Safari 扩展文件夹中获取它,然后将 .safariextz 更改为 .xar,然后使用 Pacifist 打开/解压以查看代码,如果您想将其添加到扩展生成器应用程序。