2

webview で Javascript との双方向通信が可能な iOS Web ブラウザーを実装したとします。モバイル Safari のように、iOS8 アクション拡張機能を動作させたい場合はどうすればよいですか? ExtensionPreprocessingJS義務付けられたオブジェクトで関数を実行し、コールバックの結果を取得するように webview に指示することに問題はありません。しかし、どうすればそれを手に入れることができNSExtensionJavaScriptPreprocessingFileますか? 対象となるアプリの拡張機能を列挙できる iOS8 API は見つかりませんでした。を手に入れることが少なくなりInfo.plist、実際にアプリ拡張機能のバンドルコンテンツからファイルを取得します。

私のテストアクション拡張機能を通じて、拡張機能に与えられた全体は、 Apple Action 拡張機能ドキュメントが言うextensionContext.inputItemsことだけであることを知っています。つまり、JSが呼び出される前であっても、JS を認識して実行する必要があります。NSItemProviderNSExtensionItemAttachmentsKeykUTTypePropertyListbeginRequestWithExtensionContext

それとも、サードパーティのアプリが Mobile Safari と同じことをするのは本当に不可能なのでしょうか? アプリ アクセス セキュリティの観点からはある程度理にかなっていますが、それでも...ここでのキーワードは「モジュール性」と「拡張性」ですよね? Mobile Safari は、バニラの UI/WKWebView の動物よりも同等の動物として扱われますか? つまり、WKWebView確かにいくつかのきちんとした新しい JS 機能 (evaluate完了ハンドラーWKUserContentController) がありますが、一般的なアクション拡張機能とどのように結び付けるのですか?

4

1 に答える 1

0

したがって、ほとんどの場合、不可能です。Action 拡張機能にはNSExtensionActivationSupportsWebPageWithMaxCountアクティベーション ルールを含めることができます。これは、拡張機能を使用して Web ページにアクセスする場合に必要であると一部のソースが主張しています。私には必要ありませんでした。宣言 NSExtensionJavaScriptPreprocessingFileするだけで十分です。とにかくactivityItems、拡張ホスト側のコントローラーに何を配置する必要があるかは誰にもわかりません。それを分類する必要があるUTIは少なくなります。私が試してみました

  • webview参照をactivityItems配列に直接入れます。これは、 UTI がないにもかかわらず、NSStringまたはのような「プリミティブ」型に対してうまく機能します。NSURLしかしWKWebView、実行時の警告が発生しますUnknown activity items supplied
  • 参照を使用して作成NSItemProviderし、最も一般的な該当する UTI を推測しkUTTypeContentます。XCode は、必要なプロトコルWKWebViewを実装していないため、すでにセマンティック警告でこの手法に抗議しています。<NSSecureCopying>当然のことながら、何もしません。

最後になりましたが、まさに私が達成したいことに対するChromium 機能のリクエストを見つけました。1Password の開発者LastPass の主な開発者は、Mobile Safari のようなレベルのアプリ拡張機能の統合は、サードパーティの iOS Web ブラウザーでは不可能であると結論付けています。

残念。

誰かが試し続けたい場合は、iOS Webview プレイグラウンドにアクティビティ コードを追加しました。自由にフォークしてください。

于 2014-12-03T16:58:19.643 に答える