【问题标题】:App Extension (Action Extension) doesn’t open应用程序扩展(操作扩展)未打开
【发布时间】:2022-01-17 06:26:24
【问题描述】:

由于某种我不明白的原因,操作扩展按钮(在共享菜单中)没有响应。此时,Action 扩展从 Safari(它是从哪里启动)捕获 URL 以在之后进行一些操作。作为 Web 和扩展之间的一个层,有一个 JS 文件(这里可能有问题,我只是复制它)

视图控制器:

class ActionViewController: UIViewController {

    var SafariURL: NSURL!

    override func viewDidLoad() {
        super.viewDidLoad()

        
        let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem
               let itemProvider = extensionItem!.attachments?.first as? NSItemProvider
               
               let propertyList = String(kUTTypePropertyList)
               if itemProvider!.hasItemConformingToTypeIdentifier(propertyList) {
                   print("I'm here2")
                   itemProvider!.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in
                       let dictionary = item as? NSDictionary
                       OperationQueue.main.addOperation {
                           let results = dictionary![NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary
                           let urlString = results!["currentUrl"] as? String
                           self.SafariURL = NSURL(string: urlString!)
                       }
                   })
               } else {
                   print("error")
               }
    }

    @IBAction func done() {
        // Return any edited content to the host app.
        // This template doesn't do anything, so we just echo the passed in items.
        self.extensionContext!.completeRequest(returningItems: self.extensionContext!.inputItems, completionHandler: nil)
}

JS 文件:

var GetURL = function() {};

GetURL.prototype = {
    
run: function(arguments) {
    arguments.completionFunction({ "currentUrl" : document.URL });
},
    
finalize: function(arguments) {
    var message = arguments["statusMessage"];
    
    if (message) {
        alert(message);
    }
}
    
};

var ExtensionPreprocessingJS = new GetURL;

【问题讨论】:

    标签: javascript ios swift ios-app-extension


    【解决方案1】:

    最后,你应该将 override func viewDidLoad 的内容更改为

    super.viewDidLoad()
    
            if let inputItem = extensionContext?.inputItems.first as? NSExtensionItem {
                   if let itemProvider = inputItem.attachments?.first {
                       itemProvider.loadItem(forTypeIdentifier: kUTTypePropertyList as String) { [self] (dict, error) in
                           guard let itemDictionary = dict as? NSDictionary else { return }
                           guard let javaScriptValues = itemDictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary else { return }
                           self.Pageurl = javaScriptValues["URL"] as? String ?? ""
    

    JS没问题!

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      相关资源
      最近更新 更多