编写Safari扩展的最佳方式是什么?我为Firefox编写了一些XUL扩展,现在我想为它们编写它们的版本。有没有一种方法可以让你添加按钮或表单到浏览器用户界面,因为输入管理器或服务菜单是不可能的?编写Safari 4扩展的最佳方式
回答
随着Safari 5.0的发布,Apple发布了一个新的扩展框架, 使用。在功能方面它类似于火狐extesion框架,允许在此链接5
更多的自定义按钮,工具栏,上下文菜单,使用JavaScript和HTML注入
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,链接到最重要的工具,类转储http://www.codethecode.com/projects/class-dump/(维基上的链接被破坏)。类转储为您提供了一个完整的Safari类的层次结构,您可以通过名称来猜测需要修补的内容。这是一个非常反复试验和错误的模式。
阅读上面的链接会给你项目的范围。
有没有一种方法可以让你添加按钮或窗体到浏览器的用户界面,因为这是不可能与输入管理器或服务菜单?
其实,用InputManager,它将是可能的。 SIMBL,对于Safari扩展的常用的技术,只是围绕InputManagers的包装 - 它代表小号集市我 NPUT 中号 anager 乙 undle 大号 oader。您可以通过简单地扩展Safari的现有类来将东西添加到菜单栏,工具栏,对话框中。也就是说,为Safari编写扩展不仅不是微不足道的,而且完全不受支持。这里有一些比较流行的,比如Inquisitor(最近被雅虎收购)和Google的Gears,但大多数情况下,它与Firefox的扩展非常不同,Firefox的扩展是官方支持和广泛使用的技术。
你也一定要考虑特殊的limitations of InputManagers on Leopard。
此外,请注意 - 苹果已经声明,输入管理员Leopard严格限制,并且不会在每个Apple Leopard Release Notes的64位应用程序中运行。考虑到大多数应用程序在Snow Leopard(包括Safari)中都是64位的,这一点尤其有趣。 Apple肯定试图抹杀InputManager作为覆盖和扩展功能的向量。 Safari迫切需要一个扩展机制。
似乎没有人甚至提到Safari实际上支持真正的插件,而输入管理器最明显的不是。
“的WebKit插件编程主题” http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/
这东西像PDF和Flash内容支持是如何实现的。看看你的/Library/Internet Plug-ins/
目录看看例子。
当然,它有固有的限制,你可能无法完成你所希望的UI修改。 Safari插件不能完成输入管理器入侵的所有功能,但它们可以在任何地方以及将来版本的操作系统中使用WebKit。 注意: Snow Leopard中Safari默认为64位,因此没有输入管理器的工作。我错过了Safari AdBlock已经... :-(我希望看到它被改写为一个真正的插件
最近事情发生了变化苹果现在有一个扩展API可用作Safari 5的一部分。你可以找到更多有关Apple's site和joining the Safari Developer Program。
扩展到Safari浏览器必须进行数字签名,但你可以从苹果的免费签名证书,这是合法的方式获得您的扩展到Safari浏览器,而不诉诸黑客很可能会导致每次苹果更新Safari时都会打破它
Safari扩展不需要批准由苹果。你只需要一个开发人员证书(免费)来制作它们,但是你可以通过它们,尽管苹果公司正在制作扩展程序库,但你不必通过那里发布它。正如你所看到的,今天已经有很多扩展可以使用。证书只是确保它没有被篡改。
如果你想看看现有的延伸,看看它是如何完成的,下载或从Safari扩展得到它的文件夹,然后更改.safariextz到所有.xar然后打开/与和平主义者提取查看代码以及是否要将其添加到Extension Builder应用程序。
- 1. 扩展jQuery插件的最佳方式
- 2. Asp.net身份 - 扩展的最佳方式
- 3. 为Safari 5编写扩展程序
- 4. 编写IF语句的最佳方式
- 5. 最佳VS2010扩展
- 6. 为Internet Explorer创建扩展的最佳方式是什么?
- 7. Firefox扩展 - 最佳实践
- 8. 如何以编程方式打包Safari扩展?
- 9. 以编程方式在Safari 8上安装扩展OSX 10.10
- 10. 扩展现有的java/maven项目的最佳方式
- 11. 在Firefox扩展中实现GCM的最佳方式?
- 12. 在ES6中导入和扩展类的最佳方式
- 13. 什么是当前使用C#扩展Excel的最佳方式?
- 14. 从扩展类中调用函数的最佳方式
- 15. 什么是扩展angularjs指令功能的最佳方式?
- 16. Android:扩展ActionBarActivity和BaseAdapter的最佳方式是什么?
- 17. 最佳方式
- 18. 在c中编写解析器的最佳/最快的方式#
- 19. 最佳编码方式
- 20. 在if结构中编写表达式的最佳方式
- 21. 编写便携式Scheme代码的最佳方式?
- 22. 如何编写EF.Functions扩展方法?
- 23. 如何编写通用扩展方法?
- 24. 扩展python/numpy性能的最佳方法
- 25. 编写Gitlab模块的最佳方法
- 26. 什么是快速/可扩展的方式来编写RESTful API?
- 27. 最佳方式
- 28. 最佳方式
- 29. 创建通用扩展/插件的最佳方法
- 30. nginx模块扩展指令变量的最佳方式是什么?
只是为了澄清,输入管理器≠Safari插件。 Safari确实有一个插件架构,但与Firefox相比,这不是开发人员所期望的。这个答案为输入管理器方法提供了很好的建议。下面的答案提供了更多有关“真实”插件的信息,即使这种方法在本例中不太可能满足您的特定需求。 – 2009-08-10 19:27:41
现在我想用simbl做一个safari插件,我已经阅读了可可逆向工程的扶手椅指南。但是执行方法时 - (void)加载;如何使用插件获取safari DOM对象,就像PIC或Flash URL一样?非常感谢你 ! – jin 2009-10-23 06:51:37