-(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;
}
}];
}
我在我的应用中使用共享扩展程序。我使用它作为UIViewController的子类而不是SLcomposer。在viewDidLoad中我试图从NSItemProvider
访问页面中的文本,但它只有一个键是公共URL,任何人都可以给我一个想法如何在kUTTypePlainText
中实现NSItemProvider
。我还设置了NSExtensionActivationSupportsText,其类型为Boolean,值为YES
答案 0 :(得分:4)
您可以使用ExtensionPreprocessingJS执行此操作。
首先,将NSExtensionJavaScriptPreprocessingFile
密钥添加到Info.plist中的NSExtensionAttributes
字典中。该值应该是没有扩展名的JavaScript文件的名称,即MyExtensionJavaScriptClass
。
然后,在Info.plist中的NSExtensionActivationRule
字典中,将NSExtensionActivationSupportsWebPageWithMaxCount
键设置为值1(类型为Number)。
接下来,使用以下代码将MyExtensionJavaScriptClass.js
添加到您的扩展程序:
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;
然后在ShareViewController viewDidLoad
和import MobileCoreServices
let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
let itemProvider = extensionItem.attachments?.first as! NSItemProvider
let propertyList = String(kUTTypePropertyList)
if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
itemProvider.loadItemForTypeIdentifier(propertyList, options: nil, completionHandler: { (item, error) -> Void in
let dictionary = item as! NSDictionary
NSOperationQueue.mainQueue().addOperationWithBlock {
let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as! NSDictionary
let title = results["title"] as! String
//yay, you got the title now
}
})
} else {
print("error")
}
答案 1 :(得分:0)
我猜您已经使用提供的网址请求网站,解析内容并从该字符串中获取标题。
BTW:Apple文档说:如果您的共享或iOS操作扩展程序需要访问网页,则必须包含非零值的NSExtensionActivationSupportsWebPageWithMaxCount键
请参阅" Accessing a Webpage"
部分