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