Safari 拡張機能を作成する最良の方法は何ですか? 私は Firefox 用の XUL 拡張機能をいくつか作成しましたが、今度はそれらのバージョンを Safari 用に作成したいと考えています。ボタンやフォームをブラウザー UI に追加できるようにする方法はありますか? これは入力マネージャーやサービス メニューでは不可能なので?
8 に答える
Safari プラグインの開発は簡単ではありません。インターフェイスは Objective-C で記述されており、そのほとんどは WebKit の一部でさえありません (そのため、ソースは表示されません)。ただし、実行中のアプリケーションのオブジェクト階層を検査してパッチを適用するための機構があります。Cocoa と Objective-C の理解が必要ですが、それ以下ではありません。
これは、プロセスのブックマークhttp://livingcode.org/2006/tab-dumping-in-safariにある高レベルの概要です。Python を使用して Safari プラグインを作成し、動作する (おそらく古い) コードを使用する方法について説明します。Python の代わりに、Objective-C バインディングを持つものなら何でも使用できます。
これには、次の 2 つの主要な部分があります。
実行中の 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/ (wiki のリンクが壊れています)。Class-dump は Safari のクラスの完全な階層を提供し、具体的には何にパッチを当てる必要があるかを名前から推測できます。これは非常に試行錯誤のモードです。
上記のリンクを読むと、プロジェクトの範囲がわかります。
最近状況が変わりました。Apple は現在、Safari 5 の一部として拡張機能 API を利用できます。詳細については、Apple のサイトで、またはSafari Developer Program に参加することで確認できます。
Safari の拡張機能はデジタル署名する必要がありますが、署名証明書は Apple から無料で入手できます。これは、Apple が Safari を更新するたびに壊れる可能性が高いハックに頼ることなく、拡張機能を 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 で機能し、OS の将来のバージョンでも機能します。注: Snow Leopard では、Safari はデフォルトで 64 ビットであるため、入力マネージャーは機能しません。私はすでにSafari AdBlockを見逃しています.
入力マネージャーやサービスメニューでは不可能なため、ブラウザーUIにボタンやフォームを追加できる方法はありますか?
実際、InputManagerを使用すれば、それは可能です。Safari拡張機能の一般的な手法であるSIMBLは、InputManagersの単なるラッパーです。これは、 S mart I nput M anager B undleLoaderの略です。Safariの既存のクラスを拡張するだけで、メニューバー、ツールバー、ダイアログなど、どこにでもコンテンツを追加できます。
とは言うものの、Safariの拡張機能を作成することは、æonが言ったように重要であるだけでなく、完全にサポートされていません。Inquisitor(最近Yahoo!が買収)やGoogleのGearsなど、比較的人気のあるものがいくつかありますが、ほとんどの場合、公式にサポートされ、広く使用されている手法であるFirefoxの拡張機能とは大きく異なります。
また、LeopardのInputManagerの特別な制限も考慮に入れる必要があります。
Safari拡張機能はアップルによって承認される必要はありません。あなたはそれらを作るための開発者証明書(無料)を持っているだけですが、それらを渡すことができ、AppleはExtension Galleryを作っていますが、そこから配布する必要はありません。ご覧のとおり、今日試すことができる拡張機能はすでにかなりあります。証明書は、改ざんされていないことを確認するだけです。
既存の拡張機能を調べてその方法を確認したい場合は、それをダウンロードするか、Safari 拡張機能フォルダーから取得してから、.safariextz を .xar に変更し、Pacifist で開いて/抽出してコードを表示し、追加する場合はExtension Builder アプリ。
また、Apple は、Leopard の時点で InputManagers が厳しく制限されており、Apple Leopard リリース ノートに従って 64 ビット アプリケーションでは実行されないと述べています。Snow Leopard (おそらく Safari を含む) ではほとんどのアプリケーションが 64 ビットになることを考えると、これは特に興味深いことです。Apple は間違いなく、機能をオーバーライドおよび拡張するベクトルとして InputManager を抹消しようとしています。Safari には拡張メカニズムがどうしても必要です。