当前位置: 首页 > news >正文

西部数码如何建设自己的网站培训机构加盟店排行榜

西部数码如何建设自己的网站,培训机构加盟店排行榜,wordpress 自定义鼠标,wordpress部署到tomcatWKWebview 下载文件需要通过JS注入的方式来下载。js下载的数据是base64编码的#xff0c;回到给原生后#xff0c;原生需要反编码后才是原始文件的数据。 具体步骤#xff1a; 配置WKWebview的js回调句柄#xff08;标识#xff09;创建WKWebview并添加到视图上实现WKScr…WKWebview 下载文件需要通过JS注入的方式来下载。js下载的数据是base64编码的回到给原生后原生需要反编码后才是原始文件的数据。 具体步骤 配置WKWebview的js回调句柄标识创建WKWebview并添加到视图上实现WKScriptMessageHandler的(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message处理下载的数据实现WKNavigationDelegate的 (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler注入js下载代码 配置WKWebview的js回调句柄标识并创建 WKWebViewConfiguration *config [[WKWebViewConfiguration alloc] init]; WKPreferences *preference config.preferences; preference.javaScriptEnabled YES; WKUserContentController * wkUController [[WKUserContentController alloc] init]; [wkUController addScriptMessageHandler:self name:onBlobData]; config.userContentController wkUController; self.webView [[WKWebview alloc] initWithFrame:self.bounds configuration:config];关键代码 [wkUController addScriptMessageHandler:self name:“onBlobData”]; onBlobData 就是我们定义给js调回来的接口或标识 #实现WKScriptMessageHandler 代理 重点实现函数didReceiveScriptMessage这里需要捕获我们上一步定义的标识事件“onBlobData”并处理对应的数据 -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{if ([message.name isEqualToString:onBlobData]) {NSString * content message.body;content [content stringByReplacingOccurrencesOfString:data:text/xml;base64, withString:];// 踢出头部信息[self saveFile:content];} }content 的值如下 data:text/xml;base64,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其中前面的’data:text/xml;base64,表示文件的数据数据内容格式编码方式。对于不同的文件有不同的内容格式可根据具体已知要下载的文件类型存取或进一步判别这个头数据来处理。取数据时要去除这个头部信息之后再反编码直接存文件即可。 存文件 存文件的时候我们可以存到我们指定的位置一般情况下是弹框让用户来选定存放位置。 - (void)saveFile:(NSString *)content {NSDateFormatter *dateFormatter [[NSDateFormatter alloc]init];[dateFormatter setDateFormat:yyyyMMddHHmmss];NSString *dateString [dateFormatter stringFromDate:[NSDate date]];NSString *filename [NSString stringWithFormat:下载文件_%.txt,dateString];NSSavePanel *panel [NSSavePanel savePanel];[panel setAllowsOtherFileTypes:YES];[panel setAllowedFileTypes:[NSArray arrayWithObjects:txt, nil]];[panel setNameFieldStringValue:filename];[panel setExtensionHidden:YES];[panel setCanCreateDirectories:YES];[panel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){if (result NSFileHandlingPanelOKButton){NSString *filePath [[panel URL]path];dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{NSData *data [[NSData alloc] initWithBase64EncodedString:content options:0];//base64 反编码// Generate the file path[data writeToFile:filePath atomically:YES];//存到指定文件直接写入});}}]; }js下载代码注入 实现WKNavigationDelegate代理并在decidePolicyForNavigationAction 函数中捕获要下载的bloburl后进行下载 - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{NSLog(decidePolicyForNavigationAction :%,navigationAction.request);if (navigationAction.navigationType WKNavigationTypeLinkActivated) {NSString *loadUrl navigationAction.request.URL.absoluteString;if ([loadUrl containsString:blob:] [[loadUrl substringWithRange:NSMakeRange(0, 5)] isEqualToString:blob:]) {NSString *jsFormat [NSString stringWithFormat:var xhr new XMLHttpRequest();xhr.open(GET, %, true);xhr.responseType blob;xhr.onload function(e) {if (this.status 200) {var blob this.response;var reader new FileReader();reader.readAsDataURL(blob);reader.onloadend function() {window.webkit.messageHandlers.onBlobData.postMessage(reader.result); //通过onBlobData 调回给oc代码}}};xhr.send();,loadUrl];NSString * strJSCode [NSString stringWithFormat:%, jsFormat];[webView evaluateJavaScript:strJSCode completionHandler:^(id _Nullable data, NSError * _Nullable error) {NSLog(blob:%,strJSCode);}];}decisionHandler(WKNavigationActionPolicyCancel);NSLog(WKNavigationActionPolicyCancel);} else {decisionHandler(WKNavigationActionPolicyAllow);NSLog(WKNavigationActionPolicyAllow);} } 重点说明xhr.open(‘GET’, ‘%’, true); 第二个参数需要替换为捕获到的blob url有些文章中介绍时使用‘(blob)’,就有人照抄代码调用了没有任何结果回调且还不知道是注入的代码不对还是请求不成功文中通过stringWithFormat将loadurl格式化到js代码中代码直接可用。有些文章中介绍时使用‘(blob)’,就有人照抄代码调用了没有任何结果回调且还不知道是注入的代码不对还是请求不成功文中通过stringWithFormat将loadurl格式化到js代码中代码直接可用。
http://www.yutouwan.com/news/167386/

相关文章:

  • 更改host文件把淘宝指向自己做的钓鱼网站大学生怎么做网站支付模块
  • 重庆网站建设推荐wordpress程序员
  • 网站套模板什么意思网站建设与栏目设置
  • 重庆环保公司网站建设wordpress 餐饮 主题
  • 网站开发 怎样做费用结算本地服务类网站成本
  • 哪个网站查企业信息免费学校vi设计案例
  • 网站建设方案可行性广州品牌营销策划公司排名
  • 做商城网站如何寻找货源原创网站模版
  • 南宁市规划建设局 网站网站编写费用
  • diy电子商城网站北京最新消息今天新增病例
  • 产品经理网站开发需求合成版本传奇手游
  • 企业公众号以及网站建设学院网站建设成果
  • 搭建网站是什么工作Wordpress调用一组文章
  • app网站多少钱农村做网站开发
  • 建设银行车主卡网上交罚款网站澎湃动力网站建设公司
  • 网站建设好评公司全国建设项目竣工验收公示网站
  • 八宿县网站seo优化排名下载软件应用
  • 太原市住房和城乡建设局的网站首页中国互联网协会调解中心
  • 建设网站需要准备哪些内容百度风云榜游戏
  • 做ic芯片的要去哪个网站做网站用需要几个软件
  • 哪里有做空包网站的峰峰网站建设
  • 大型网站建设托管服务建设公司哪家好
  • 网站建设要域名和什么网站策划书预期风险
  • 网站开发的平台网站建设费的会计分录
  • 东莞网站建设(信科分公司)wordpress主题首页显示不全
  • 网站建设法律可行性网页链接中的文件路径分为
  • 在小说网站做责编创建wordpress主题
  • sqlite3做网站数据库东莞网站建设团队全网天下
  • 网页新建站点食品电子商务网站建设规划书
  • 江苏连云港网站设计公司cordova wordpress