web-dev-qa-db-ja.com

Web ExtensionをSafari App Extensionに変換する

現在Chrome、Firefox、Operaで動作するWeb拡張機能があります。同じコードを使用してSafari App Extensionを構築する方法があるのだろうか、おそらくPhoneGap(Safari App Extensionプロジェクトのすべての既存のJSコードをラップする)またはJavaScriptのタブ処理などの制限があり、いくつかのことが必要ですネイティブコードで記述されている。

ありがとう

9
Bojan V

Web拡張機能からコンテンツスクリプトを再利用できるはずです(ただし、「バックグラウンド」でメッセージを送受信できるようにコードを書き直す必要があります)。バックグラウンドスクリプトはSwiftまたはObjective-Cで書き直す必要があります。

開発する必要があります:

  • macホストアプリケーション(拡張機能のコンパニオンになります):SwiftまたはObjective-C(このアプリは、Appleレビューに合格するための最小限の機能を備えている必要があります-Apple Macアプリのガイドライン)
  • 拡張機能:SwiftまたはObjective-C + HTML/JS(他のブラウザの場合)の拡張機能のSwift(またはObj-C)のコードは、背景と同等ですWeb Extensionsにあるページ。ツールバーボタン、拡張機能のライフサイクルを制御し、挿入されたスクリプトと対話できます。

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)。

10

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 および

https://github.com/jetpack-labs/chrome-tailor-jetpack

また、ここに 公式ガイド があり、Chrome拡張機能をWebExtensionsを使用してFirefoxアドオンに変換します。

0
abielita

すべてをSwiftで作成できるわけではありません。たとえば、extensionHandlerからdylibを呼び出そうとしましたが、失敗しました。

0
Йохан К.

従来のSafari拡張(Safari v12で非推奨)ではなくSafariアプリ拡張について話している場合、私の理解は、バックグラウンドスクリプトをSwiftで書き直す必要があることです。コンテンツスクリプトについては、JSのままですが、chrome API呼び出しで記述されたすべてのメッセージングは​​、SafariアプリAPIを使用して書き換える必要があります。

0
addeective.com

上記のように、コンテンツスクリプトは、Firefoxで作成したバンドルおよびChrome拡張機能と同じままにすることができます。plistに含めるだけで済みます。すべてのバックグラウンドロジックの書き換えを回避するにはSwiftでは、Appleが提供するJavascriptCoreというライブラリを使用しました。これにより、JavaScriptコンテキストを作成し、Swift backgroundからJavaScriptバックグラウンドバンドルにデータを渡すことができます。

例えば: safariExtensionHandler.SwiftにはmessageReceivedという関数があります。この関数は、コード内でSwift using JavascriptCoreからグローバルJavaScript関数を呼び出すことができます。

0
RawiSader