博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IOS分享扩展使用JS脚本
阅读量:6983 次
发布时间:2019-06-27

本文共 3909 字,大约阅读时间需要 13 分钟。

hot3.png

实现一个分享扩展插件,功能是从Safari网页中截取当前网页的图片内容

输入图片说明输入图片说明

基本的步骤总结在下面:

1.创建一个JS文件,命名为MyJavascriptFile.js,文件的功能是解析safari网页内容,获取到网页中的所有图片节点,解析从图片的URL,返回所有图片URL拼接而成的字符串。

JS中主要用到run: function(arguments){}这个方法来处理抓取数据的逻辑,处理抓取到的数据调用 arguments.completionFunction({ "webImages": imageArrStr }); 这个方法把数据返回,"webImages"这个key可以自定义,在第三步的原生层OC代码中需要用到这个key把JS层抓取到的数据取出来,然后可以对这些图片数据进行保存、上传等需要的操作了。

MyJavascriptFile.js文件内容

var BuscapeClass = function() {};BuscapeClass.prototype = {        run: function(arguments) {        var imageArray = new Array();        var objs = document.getElementsByTagName("img");        for(var i=0;i

2.在info.plis文件中把创建的JS文件进行配置,配置如下: 输入图片说明

配置的源码

NSExtension
NSExtensionAttributes
NSExtensionActivationRule
SUBQUERY ( extensionItems, $extensionItem, SUBQUERY ( $extensionItem.attachments, $attachment, ( ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.url" || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.image" || ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO "public.plain-text" ) ).@count >= $extensionItem.attachments.@count).@count >= 1
NSExtensionJavaScriptPreprocessingFile
MyJavascriptFile
NSExtensionMainStoryboard
MainInterface
NSExtensionPointIdentifier
com.apple.share-services

3.原生层OC代码中处理JS抓取的数据,主要用到这两句,把数据取出来"webImages"这个key要和JS中定义的KEY一致

NSDictionary *results = jsDict[NSExtensionJavaScriptPreprocessingResultsKey];NSString* result = [results objectForKey:@"webImages"];

完整的处理代码

- (void)fetchDataFromWebContent {    __weak typeof(self) weakSelf = self;    //获取inputItems,在这里itemProvider是你要分享的图片    NSArray* extensionItems = self.extensionContext.inputItems;    for (NSExtensionItem *extensionItem in extensionItems) {                NSMutableArray* tmpTypeImageArr = [NSMutableArray array];        NSMutableArray* tmpTypePropertyListArr = [NSMutableArray array];                NSArray* attachments = extensionItem.attachments;        // 处理attachments        for (NSItemProvider *itemProvider in attachments) {                        // 注入JS获取图片数据数据            if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypePropertyList]) {                [itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypePropertyList options:nil completionHandler:^(NSDictionary *jsDict, NSError *error) {                    NSLog(@"jsDict: %@", jsDict);                                        dispatch_async(dispatch_get_main_queue(), ^{                        // Get javascript result                        NSDictionary *results = jsDict[NSExtensionJavaScriptPreprocessingResultsKey];                        NSString* result = [results objectForKey:@"webImages"];                        BMLog(@"=== webImages ===%@", result);                        NSArray* tmpArr = [weakSelf handleImages:result];                        if (tmpArr.count > 0) {                            [tmpTypePropertyListArr addObjectsFromArray:tmpArr];                        }                                                [weakSelf handleResult:tmpTypePropertyListArr];                    });                }];            }        }    }}- (NSArray*)handleImages:(NSString*)imagesStr {    NSMutableArray* mUrlArray = [NSMutableArray arrayWithArray:[imagesStr componentsSeparatedByString:@"+"]];    NSMutableArray* tmpUrls = [NSMutableArray array];    for (int i = mUrlArray.count-1; i>=0; i--) {        NSString* url = mUrlArray[i];        // 过滤空的和jpg的图像        if (![url isEmptyOrWhitespace]) {            // 在这里处理图片的URL        }    }    NSLog(@"mUrlArray = %@   tmpUrls = %@", mUrlArray, tmpUrls);    return tmpUrls;}

参考资料:

转载于:https://my.oschina.net/FEEDFACF/blog/831717

你可能感兴趣的文章
我的友情链接
查看>>
洛谷——P1403 [AHOI2005]约数研究
查看>>
为什么硬盘只能有四个主分区
查看>>
IT十八掌掌第二天课程总结
查看>>
职业SNS天际网:透视“屌丝文化” 解析当今职场
查看>>
Leetcode 29. Divide Two Integers
查看>>
Kubernetes 1.5集成heapster
查看>>
清华赵骥主任与CIO石海军研讨互联网信息化
查看>>
tnsname.ora文件解析
查看>>
论文:论项目的计划和监控
查看>>
linux启动引导过程 grub和mbr
查看>>
lnmp环境安装
查看>>
Codeforces Round #438 868A/B/C
查看>>
每天一个linux命令(4):mkdir命令
查看>>
课后作业4之个人总结
查看>>
php常用的系统函数大全
查看>>
Jade To Pug过程中的一个小问题
查看>>
在ubuntu中搜索文件或文件夹的方法
查看>>
ioc——实现原理
查看>>
腾讯hr面
查看>>