Ios 如何在共享扩展视图控制器中获取标题?

Ios 如何在共享扩展视图控制器中获取标题?,ios,iphone,ios8-share-extension,Ios,Iphone,Ios8 Share Extension,我正在我的应用程序中使用共享扩展。我使用它作为UIViewController而不是SLcomposer的子类。在viewDidLoad中,我试图从NSItemProvider访问页面中的文本,但它只有一个键,即public url,有谁能告诉我如何在NSItemProvider中实现kUTTypePlainText。我还将NSExtensionActivationSupportsText设置为Boolean,将其类型设置为Boolean,将值设置为YES,我想您必须使用提供的URL请求站点,解

我正在我的应用程序中使用共享扩展。我使用它作为UIViewController而不是SLcomposer的子类。在viewDidLoad中,我试图从
NSItemProvider
访问页面中的文本,但它只有一个键,即public url,有谁能告诉我如何在
NSItemProvider
中实现
kUTTypePlainText
。我还将NSExtensionActivationSupportsText设置为Boolean,将其类型设置为Boolean,将值设置为YES,我想您必须使用提供的URL请求站点,解析内容并从该字符串中获取标题

顺便说一句:苹果的文档说:

如果您的共享或iOS操作扩展需要访问网页,则必须包含具有非零值的NSExtensionActivationSupportsWebPageWithMaxCount键


请参阅“

部分,我想您必须使用提供的URL请求站点,解析内容并从该字符串获取标题

顺便说一句:苹果的文档说:

如果您的共享或iOS操作扩展需要访问网页,则必须包含具有非零值的NSExtensionActivationSupportsWebPageWithMaxCount键


请参阅“

一节,您可以使用ExtensionPreprocessingJS来执行此操作

首先,将
NSExtensionJavaScriptPreprocessingFile
键添加到Info.plist中的
NSExtensionAttributes
字典中。该值应该是不带扩展名的JavaScript文件名,即
MyExtensionJavaScriptClass

然后,在Info.plist中的
NSExtensionActivationRule
字典中,将
NSExtensionActivationSupportsWebPageWithMaxCount
键的值设置为1(类型编号)

接下来,使用以下代码向扩展添加
MyExtensionJavaScriptClass.js

-(void)viewDidLoad {

    [super viewDidLoad];

    NSExtensionItem *item = self.extensionContext.inputItems[0];
    NSItemProvider *itemProvider = item.attachments[0];
     NSLog(@"%@",itemProvider);

    if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePlainText])
    {    
        [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePlainText options:nil completionHandler:^(NSString *item, NSError *error)
        {       
            if (item)
            {
                textString=item;    
            }
        }];
    }
然后在ShareViewController中包含以下功能
viewDidLoad
import MobileCoreServices

var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
    run: function(arguments) {
       arguments.completionFunction({"title": document.title});
    } 
};

// The JavaScript file must contain a global object named "ExtensionPreprocessingJS".
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;

您可以使用ExtensionPreprocessingJS来实现这一点

首先,将
NSExtensionJavaScriptPreprocessingFile
键添加到Info.plist中的
NSExtensionAttributes
字典中。该值应该是不带扩展名的JavaScript文件名,即
MyExtensionJavaScriptClass

然后,在Info.plist中的
NSExtensionActivationRule
字典中,将
NSExtensionActivationSupportsWebPageWithMaxCount
键的值设置为1(类型编号)

接下来,使用以下代码向扩展添加
MyExtensionJavaScriptClass.js

-(void)viewDidLoad {

    [super viewDidLoad];

    NSExtensionItem *item = self.extensionContext.inputItems[0];
    NSItemProvider *itemProvider = item.attachments[0];
     NSLog(@"%@",itemProvider);

    if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePlainText])
    {    
        [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePlainText options:nil completionHandler:^(NSString *item, NSError *error)
        {       
            if (item)
            {
                textString=item;    
            }
        }];
    }
然后在ShareViewController中包含以下功能
viewDidLoad
import MobileCoreServices

var MyExtensionJavaScriptClass = function() {};

MyExtensionJavaScriptClass.prototype = {
    run: function(arguments) {
       arguments.completionFunction({"title": document.title});
    } 
};

// The JavaScript file must contain a global object named "ExtensionPreprocessingJS".
var ExtensionPreprocessingJS = new MyExtensionJavaScriptClass;