現在Chrome、Firefox、Operaで動作するWeb拡張機能があります。同じコードを使用してSafari App Extensionを構築する方法があるのだろうか、おそらくPhoneGap(Safari App Extensionプロジェクトのすべての既存のJSコードをラップする)またはJavaScriptのタブ処理などの制限があり、いくつかのことが必要ですネイティブコードで記述されている。
ありがとう
Web拡張機能からコンテンツスクリプトを再利用できるはずです(ただし、「バックグラウンド」でメッセージを送受信できるようにコードを書き直す必要があります)。バックグラウンドスクリプトはSwiftまたはObjective-Cで書き直す必要があります。
開発する必要があります:
Apple Webサイトに(小さな)例があります: https://developer.Apple.com/documentation/safariservices/safari_app_extensions?changes=_2&language=objc
Extension Builder(Safariの[Developer]メニューからアクセス可能)はもう使用しないでください。これは、レガシー(純粋なJS)拡張機能のみを対象としているためです。したがって、XCodeを取得する必要があります。
最後に重要なことですが、Safari App Extensionsは、Safariのレガシー拡張機能と比較して、「少し」制限されています(たとえば、Chrome web-extensions)。
Google-Chrome拡張機能をFirefoxまたはSafari拡張機能に変換する方法については、この link を参照してください。
現在、手作業が少しあります。
https://github.com/kritollm/chrome-extension-api-for-safari-and-firefox
私がこの記事を最初に書いた後、私は非常に似ている他の2つのプロジェクトに気づきました。
https://code.google.com/p/adblockforchrome/source/browse/trunk/port.js および
また、ここに 公式ガイド があり、Chrome拡張機能をWebExtensionsを使用してFirefoxアドオンに変換します。
すべてをSwiftで作成できるわけではありません。たとえば、extensionHandlerからdylibを呼び出そうとしましたが、失敗しました。
従来のSafari拡張(Safari v12で非推奨)ではなくSafariアプリ拡張について話している場合、私の理解は、バックグラウンドスクリプトをSwiftで書き直す必要があることです。コンテンツスクリプトについては、JSのままですが、chrome API呼び出しで記述されたすべてのメッセージングは、SafariアプリAPIを使用して書き換える必要があります。
上記のように、コンテンツスクリプトは、Firefoxで作成したバンドルおよびChrome拡張機能と同じままにすることができます。plistに含めるだけで済みます。すべてのバックグラウンドロジックの書き換えを回避するにはSwiftでは、Appleが提供するJavascriptCore
というライブラリを使用しました。これにより、JavaScriptコンテキストを作成し、Swift backgroundからJavaScriptバックグラウンドバンドルにデータを渡すことができます。
例えば: safariExtensionHandler.Swift
にはmessageReceived
という関数があります。この関数は、コード内でSwift using JavascriptCore
からグローバルJavaScript関数を呼び出すことができます。