分享选定文本 - iOS 分享扩展

3

我希望能够分享选定的文本,但我的扩展程序只在单击共享图标时出现(然后它会用页面标题填充字段)。我希望我的扩展程序出现在用户选择文本并单击“分享…”(如下图所示)时,并希望它将选定的文本填充到文本区域中。

I want extension to be accessible here

共享视图控制器:
override func viewDidLoad() {
        super.viewDidLoad()

        customPopup()

        let extensionItem = extensionContext?.inputItems.first as! NSExtensionItem
        let itemProvider = extensionItem.attachments?.first as! NSItemProvider
        let propertyList = String(kUTTypePropertyList)
        if itemProvider.hasItemConformingToTypeIdentifier(propertyList) {
            itemProvider.loadItem(forTypeIdentifier: propertyList, options: nil, completionHandler: { (item, error) -> Void in
                guard let dictionary = item as? NSDictionary else { return }
                OperationQueue.main.addOperation {
                    if let results = dictionary[NSExtensionJavaScriptPreprocessingResultsKey] as? NSDictionary {
                            print("RESULTS: \n", results)
                    }
                }
            })
        } else {
            print("error")
        }
    }

Action.js(JS 预处理)

var MyPreprocessor = function() {};

MyPreprocessor.prototype = {
run: function(arguments) {
    arguments.completionFunction({"URL": document.URL, "title": document.title, "selection": window.getSelection().toString()});
}
};

var ExtensionPreprocessingJS = new MyPreprocessor;

Info.plist

1个回答

5
现在,您的NSExtensionActivationRule明确要求一个Web网址,所以您得到的就是这个。相反,尝试更改info.plist中的NSExtensionActivationRule为:
<dict>
    <key>NSExtensionActivationSupportsText</key>
    <true/>
</dict>

如果那样不行,尝试更长的方法:
<key>NSExtensionAttributes</key>
<dict>
    <key>NSExtensionActivationUsesStrictMatching</key>
    <integer>2</integer>
    <key>NSExtensionActivationRule</key>
    <dict>
        <key>NSExtensionActivationDictionaryVersion</key>
        <integer>2</integer>
        <key>NSExtensionActivationSupportsText</key>
        <true/>
    </dict>
</dict>

你可以阅读此帖子以了解更多信息:IOS共享扩展:如何从笔记文章中读取

1
将NSExtensionActivationRule更改为以下内容即可解决问题。 <dict> <key>NSExtensionActivationSupportsText</key> <integer>1</integer> </dict> - connorvo
然而,这种启动应用程序扩展的方式绕过了预处理器JavaScript。有人弄清楚了吗? - ykonda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接