我正在为safari制作一个动作扩展程序,我需要在扩展程序中获取所选文本。
通常在iOS中,我使用此代码在webview中获取所选文本
selectedText.text = [WebView stringByEvaluatingJavaScriptFromString: @ "window.getSelection (). toString ()"];
但在扩展程序中我不知道该怎么做!
为了完整性,它应该是IU的扩展,我只是打开NSExtensionActivationSupportsWebURLWithMaxCount以在Safari中提供扩展。
提前致谢
答案 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,它几乎与你的要求相似。