2

假设我已经实现了一个 iOS 网络浏览器,能够在 webview 中与 Javascript 进行双向通信。如果我想要任何iOS8 Action 扩展在其中工作,就像在 Mobile Safari 中那样,我必须做什么?告诉webview对授权ExtensionPreprocessingJS对象执行函数并获取回调结果是没有问题的。但我怎么能抓住它NSExtensionJavaScriptPreprocessingFile呢?我还没有找到任何允许我枚举符合条件的应用程序扩展的 iOS8 API。获取他们Info.plist的 s 并实际从应用程序扩展的捆绑内容中获取文件的次数越少。

通过我的测试 Action 扩展,我知道extensionContext.inputItems曾经给予扩展的全部内容只是Apple Action 扩展文档所说的:一个NSItemProviderunder NSExtensionItemAttachmentsKey,提供一个单一kUTTypePropertyList的 JS 执行已经返回的内容。换句话说,JS 必须在beginRequestWithExtensionContext被调用之前就被知道并被执行。

我是否错过了什么,或者 3rd 方应用程序真的不可能像 Mobile Safari 一样做同样的事情?从应用程序访问安全的角度来看,这是有道理的,但是……这里的关键词是“模块化”和“可扩展性”,对吧?Mobile Safari 是不是比普通的 UI/WKWebView 动物更平等?我的意思是,WKWebView确实有一些简洁的新 JS 功能(evaluate完成处理程序WKUserContentController),但我如何将它与通用 Action 扩展连接起来?

4

1 回答 1

0

所以,很可能,不可能。操作扩展程序可以具有NSExtensionActivationSupportsWebPageWithMaxCount激活规则,当您想使用扩展程序触摸网页时,某些来源声称需要该规则。我不需要它,声明 NSExtensionJavaScriptPreprocessingFile就足够了。无论如何,没有人知道您需要将什么放到activityItems扩展主机端的控制器中,它应该归类的UTI越少。我试过了

  • 将 webview 引用直接放在activityItems数组中。尽管缺少 UTI,这对于像NSStringor这样的“原始”类型非常有效。NSURL但是因为WKWebView它会导致运行时警告Unknown activity items supplied
  • 使用参考创建NSItemProvider,用最通用的适用性猜测 UTI kUTTypeContent。XCode 已经用语义警告来抗议该技术,因为WKWebView没有实现所需的<NSSecureCopying>协议。不出所料,什么都不做。

最后但并非最不重要的一点是,我找到了一个Chromium 功能请求,正是我想要实现的目标。一位 1Password 开发人员一位 LastPass 主要开发人员得出的结论是,移动 Safari 中的应用程序扩展集成水平在第三方 iOS 网络浏览器中是不可能的。

真可惜。

如果有人想继续尝试,我已经用 Activity 代码操纵了我的iOS webview 游乐场。随意分叉。

于 2014-12-03T16:58:19.643 回答