ios共享扩展无法从chrome获取共享URL

时间:2016-05-26 07:26:32

标签: ios iphone ios8-share-extension

我正在尝试为我的应用实施共享扩展。它在safari浏览器和youtube应用程序中工作良好(即)当我从这些应用程序共享时,我得到了public.url,这是要共享的URL。

当我在chrome中尝试相同时,它没有显示扩展名。当我在NSExtensionActivationRule下添加NSExtensionActivationSupportsText为true时,它开始显示。但是当我尝试共享内容时,我无法获取要共享的URL字符串。我只得到contentText。

我已按照此链接中显示的方法https://stackoverflow.com/a/31942744/6199038

我还添加了demoProcessor.js

var MyPreprocessor = function() {};
MyPreprocessor.prototype = {
run: function(arguments) {
    arguments.completionFunction({"URL": document.URL, "pageSource": document.documentElement.outerHTML, "title": document.title, "selection": window.getSelection().toString()});
}
};
var ExtensionPreprocessingJS = new MyPreprocessor;

我正在使用 SLComposeServiceViewController

在我的ShareViewController.m中,我试图获取如下所示的数据,

对于safari我使用了这个工作正常

NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = [[item.userInfo valueForKey:NSExtensionItemAttachmentsKey] objectAtIndex:0];
if ([itemProvider hasItemConformingToTypeIdentifier:@"public.url"]) {
    [itemProvider loadItemForTypeIdentifier:@"public.url" options:nil completionHandler:^(NSURL *url, NSError *error) {
        urlString = url.absoluteString;
        NSLog(@"urlString %@",urlString);
    }];
}

然后我将我的代码修改为此以从chrome获取URL,这不起作用。

 for (NSExtensionItem *item in self.extensionContext.inputItems) {
    for (NSItemProvider *itemProvider in item.attachments) {
        if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePropertyList]) {
            [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *jsDict, NSError *error) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    NSDictionary *jsPreprocessingResults = jsDict[NSExtensionJavaScriptPreprocessingResultsKey];

                    NSString *selectedText = jsPreprocessingResults[@"selection"];
                    NSString *pageTitle = jsPreprocessingResults[@"title"];
                    NSString *URL = jsPreprocessingResults[@"URL"];

                    NSLog(@"selectedText %@",selectedText);
                    NSLog(@"pageTitle %@",pageTitle);
                    NSLog(@"URL %@",URL);
                });
            }];

            break;
        }
    }

}

请咨询

1 个答案:

答案 0 :(得分:2)

我自己解决了。因为它没有进入" loadItemForTypeIdentifier"方法。所以我将我的方法修改为以下代码

for (NSExtensionItem *item in self.extensionContext.inputItems) {
        for (NSItemProvider *itemProvider in item.attachments) {

            NSString *URLinPlainText = [item.attributedContentText string];
            if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
                [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(NSURL *url, NSError *error) {

                    urlString = url.absoluteString;
                    NSLog(@"<< URL >> %@",urlString);
                    return;
                }];
            }
            else if (URLinPlainText)  {
                // In Some app i got the URL in a Plain text mode
                if([URLinPlainText containsString:@"http"]){
                    urlString = [sharedPlainText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
                    NSLog(@"<< URL >> %@",urlString);
                    return;
                }
            }
        }
    }

我还删除了demoProcessor.js。 现在我能够从几乎所有的新闻应用程序,浏览器(Chrome,firefox,safari)和一些应用程序中获取URL,我将以纯文本的形式获取共享URL,然后我必须删除空格并将其转换为NSString。

根据我的理解,如果用户想要访问ex(title,baseURL,og:image,og:description etc ...)的url页面属性,则使用demoprocessor.js,该属性仅适用于safari浏览器。