在Safari中获取所选文本并在操作扩展中使用它

时间:2014-12-07 22:04:41

标签: xcode ios8 mobile-safari action ios-app-extension

我正在为safari制作一个动作扩展程序,我需要在扩展程序中获取所选文本。

通常在iOS中,我使用此代码在webview中获取所选文本

selectedText.text = [WebView stringByEvaluatingJavaScriptFromString: @ "window.getSelection (). toString ()"];

但在扩展程序中我不知道该怎么做!

为了完整性,它应该是IU的扩展,我只是打开NSExtensionActivationSupportsWebURLWithMaxCount以在Safari中提供扩展。

提前致谢

2 个答案:

答案 0 :(得分:10)

正如Apple在App Extension Programming Guide中解释的那样,您需要在扩展程序中包含一个JavaScript文件来执行任何预处理。预处理的结果可通过扩展程序中的NSExtensionItem获得。

此文件的一个简单示例包含在GitHub的iOS Extension Demo项目中,如下所示:

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;

这只是提取有关当前页面的各种详细信息并将其传递给completionFunction。最后的ExtensionPreprocessingJS var是扩展框架所寻找的钩子。

在扩展程序中,您可以通过询问kUTTypePropertyList类型的项来检索词典中的这些值:

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];
                    // Continue with data returned from JS...

答案 1 :(得分:0)

您可能需要执行.js文件才能执行该操作。

我建议你参考这个Extension's Tutorial,它几​​乎与你的要求相似。