IOS原声与JS交互
IOS原声与JS交互
跟原生开发相比,H5的开发相对来一个成熟的框架和团队来讲在开发速度和开发效率上有着比原生很大的优势,至少不用等待审核。那么问题来了,H5与本地原生代码势必要有交互的,比如本地上传一些信息,H5打开本地的页面,打开本地进行微信等第三方分享等,今天就简单讲一下iOS中本地UIWebView,WKWebView与H5的交互。
DEMO地址:点击下载
UIWebView的交互
stringByEvaluatingJavaScriptFromString的使用
UIWebView在2.0时代就有的类,一直到现在(目前9.x)都可以使用的WEB容器,它的方法很简单,在iOS7.0之前JS交互的方法只有一个stringByEvaluatingJavaScriptFromString:
(nullable NSString )stringByEvaluatingJavaScriptFromString:(NSString )script; 使用stringByEvaluatingJavaScriptFromString方法,需要等UIWebView中的页面加载完成之后去调用.
以下是简单的使用场景:
1、获取当前页面的url。
(void)webViewDidFinishLoad:(UIWebView *)webView { NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@”document.location.href”]; } 2、获取页面title:
(void)webViewDidFinishLoad:(UIWebView *)webView { NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@”document.location.href”]; NSString *title = [webview stringByEvaluatingJavaScriptFromString:@”document.title”]; } 3、修改界面元素的值。
NSString *js_result = [webView stringByEvaluatingJavaScriptFromString:@”document.getElementsByName(‘q’)[0].value=’iOS’;”]; 4、表单提交:
NSString *js_result2 = [webView stringByEvaluatingJavaScriptFromString:@”document.forms[0].submit(); “]; 这样就实现了在google搜索关键字:“iOS”的功能。 5、插入js代码 上面的功能我们可以封装到一个js函数中,将这个函数插入到页面上执行,代码如下:
"script.type = 'text/javascript';"
"script.text = \"function myFunction() { "
"var field = document.getElementsByName('q')[0];"
"field.value='iOS';"
"document.forms[0].submit();"
"}\";"
"document.getElementsByTagName('head')[0].appendChild(script);"];
[webView stringByEvaluatingJavaScriptFromString:@"myFunction();"];
看上面的代码:
a、首先通过js创建一个script的标签,type为’text/javascript’。 b、然后在这个标签中插入一段字符串,这段字符串就是一个函数:myFunction,这个函数实现google自动搜索关键字的功能。 c、然后使用stringByEvaluatingJavaScriptFromString执行myFunction函数。
6、直接调用JS函数
上面的函数调用是本地注入到H5中,然后本地调用的,那么如果H5中就有原生的JS函数:myFunction();,那么我们就可以直接执行:
[webView stringByEvaluatingJavaScriptFromString:@”myFunction();”]; JavaScriptCore框架的使用
我们会发现stringByEvaluatingJavaScriptFromString的方法调用太笨拙,在iOS7.0中苹果公司增加了JS利器JavaScriptCore框架,框架让Objective-C和JavaScript代码直接的交互变得更加的简单方便。该框架其实只是基于webkit中以C/C++实现的JavaScriptCore的一个包装。其本身是可以单独作为一个开发库来使用,框架中有完整的数据计算逻辑,今天只讲H5与本地交互,所以不作涉及,有兴趣可以参考:iOS7新JavaScriptCore框架入门介绍。
JavaScriptCore提供了很多灵活的本地OC与JS的交互方式,通过JSContext和JSValue来完成的,JSContext是一个WebView中js代码运行环境,所有的JS交互都要通过- (JSValue )evaluateScript:(NSString )script;方法就可以执行一段JavaScript脚本。
JSValue则可以说是JavaScript和Object-C之间互换的桥梁,它提供了多种方法可以方便地把JavaScript数据类型转换成Objective-C.
具体如何交互我们先来看一段H5代码:
测试iOS与JS之前的互调 * { font-size: 40px; } function showAppAlertMsg(message){ alert(message); }
Test how to use objective-c call js
我们可以看出其中H5实现的JS代码如下:
function showAppAlertMsg(message){ alert(message); }
函数showAppAlertMsg是H5实现可以由我们本地主动调用的。那么相对应的H5主动调用的方法是:
其中callSystemCamera()是H5调用的函数,我们可以看到在HTML代码中是找不到这个函数的实现的,因为这个函数是需要我们本地去实现。
接下来我们就讲一下我们本地如何调用由H5实现的函数showAppAlertMsg,本地如何实现能够右H5端调用的方法:
1.在页面加载完成之后获取JS运行环境JSContext
(void)webViewDidFinishLoad:(UIWebView *)webView { JSContext *jsContext = [webView valueForKeyPath:@”documentView.webView.mainFrame.javaScriptContext”]; } 2.利用evaluateScript声明函数并传递参数执行代码
JSValue *jsValue = [jsContext evaluateScript:@”showAppAlertMsg”]; [jsValue callWithArguments:@[@”这是app本地交互文案”]]; 第一行代码是声明一个函数showAppAlertMsg,第二行是传递参数并执行代码callWithArguments.
以上是主动调用H5实现的函数,也可以称之为传递数据给H5。
本地实现能够让H5调用的函数:
// 也可以通过下标的方式获取到方法
self.jsContext[@"callSystemCamera"] = ^(){
NSLog(@"callSystemCamera");
};
self.jsContext[@"showAlertMsg"] = ^(NSString *title, NSString *message){
NSLog(@"callSystemCamera");
};
self.jsContext[@"callWithDict"] = ^(id jsonDic){
NSLog(@"callWithDict%@",jsonDic);
};
一目了然,通过Block传递参数和方法。
上面是利用JavaScriptCore的最基本的方法实现JS调用,还有另外一种方案利用JSExport协议进行交互.其实可以理解为通过JSExport协议实现一种把本地的实例绑定为H5中的一个对象,通过这个对象调用本地实例方法的一种交互设计。 该设计在H5端与上面的是不一样的:
我们会发现 与之前的H5代码相比 多了一个 OCModel,这个在JS中可以理解为一个对象,点击按钮之后调用对象OCModel中的函数OCModel.callSystemCamera,那么该对象如何由本地绑定呢。
1.首先声明一个JSExport协议,该协议需要声明刚才H5中的函数:
import
import “NLJsObjCModel.h”
@implementation NLJsObjCModel
(void)callWithDict:(NSDictionary *)params { NSLog(@”Js调用了OC的方法,参数为:%@”, params); }
// Js调用了callSystemCamera - (void)callSystemCamera { NSLog(@”JS调用了OC的方法,调起系统相册”);
// JS调用后OC后,又通过OC调用JS,但是这个是没有传参数的
JSValue *jsFunc = self.jsContext[@"jsFunc"];
[jsFunc callWithArguments:nil];
}
(void)jsCallObjcAndObjcCallJsWithDict:(NSDictionary *)params { NSLog(@”jsCallObjcAndObjcCallJsWithDict was called, params is %@”, params);
// 调用JS的方法 JSValue *jsParamFunc = self.jsContext[@”jsParamFunc”]; [jsParamFunc callWithArguments:@[@{@”age”: @10, @”name”: @”lili”, @”height”: @158}]]; }
(void)showAlert:(NSString )title msg:(NSString )msg { dispatch_async(dispatch_get_main_queue(), ^{ UIAlertView *a = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@”Ok” otherButtonTitles:nil, nil]; [a show]; }); } @end 3.将NLJsObjCModel实例对象绑定到JS中:
pragma mark - UIWebViewDelegate
(void)webViewDidFinishLoad:(UIWebView *)webView { self.jsContext = [webView valueForKeyPath:@”documentView.webView.mainFrame.javaScriptContext”]; // 通过模型调用方法,这种方式更好些。 NLJsObjCModel *model = [[NLJsObjCModel alloc] init]; self.jsContext[@”OCModel”] = model; model.jsContext = self.jsContext; model.webView = self.webView;
self.jsContext.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) { context.exception = exceptionValue; NSLog(@”异常信息:%@”, exceptionValue); }; } 到此结束,H5按钮点击之后就可以通过JSExport协议传递跟本地对象,本地对象就能收到相应。
WKWebView的交互使用
iOS8以后,苹果推出了新框架Wekkit,提供了替换UIWebView的组件WKWebView。
先看下 WKWebView的特性: 1. 在性能、稳定性、功能方面有很大提升(最直观的体现就是加载网页是占用的内存,模拟器加载百度与开源中国网站时,WKWebView占用23M,而UIWebView占用85M); 2. 允许JavaScript的Nitro库加载并使用(UIWebView中限制); 3. 支持了更多的HTML5特性; 4. 高达60fps的滚动刷新率以及内置手势; 5. 将UIWebViewDelegate与UIWebView重构成了14类与3个协议(查看苹果官方文档);
WKWebView 的使用呢与UIWebView相同,不同的是回调和代理方法.这里简单介绍一下.
WKNavigationDelegate
// 页面开始加载时调用 - (void)webView:(WKWebView )webView didStartProvisionalNavigation:(WKNavigation )navigation; // 当内容开始返回时调用 - (void)webView:(WKWebView )webView didCommitNavigation:(WKNavigation )navigation; // 页面加载完成之后调用 - (void)webView:(WKWebView )webView didFinishNavigation:(WKNavigation )navigation; // 页面加载失败时调用 - (void)webView:(WKWebView )webView didFailProvisionalNavigation:(WKNavigation )navigation; 页面跳转的代理方法:
// 接收到服务器跳转请求之后调用 - (void)webView:(WKWebView )webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation )navigation; // 在收到响应后,决定是否跳转 - (void)webView:(WKWebView )webView decidePolicyForNavigationResponse:(WKNavigationResponse )navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler; // 在发送请求之前,决定是否跳转 - (void)webView:(WKWebView )webView decidePolicyForNavigationAction:(WKNavigationAction )navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler; 新的 WKUIDelegate协议
这个协议主要用于WKWebView处理web界面的三种提示框(警告框、确认框、输入框),下面是警告框的例子:
/** * web界面中有弹出警告框时调用 * * @param webView 实现该代理的webview * @param message 警告框中的内容 * @param frame 主窗口 * @param completionHandler 警告框消失调用 */ - (void)webView:(WKWebView )webView runJavaScriptAlertPanelWithMessage:(NSString )message initiatedByFrame:(void (^)())completionHandler; 动态加载并运行JS代码(WKUserScript)
用于在客户端内部加入JS代码,并执行,示例如下
// 图片缩放的js代码 NSString *js = @”var count = document.images.length;for (var i = 0; i < count; i++) {var image = document.images[i];image.style.width=320;};window.alert(‘找到’ + count + ‘张图’);”; // 根据JS字符串初始化WKUserScript对象 WKUserScript *script = [[WKUserScript alloc] initWithSource:js injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES]; // 根据生成的WKUserScript对象,初始化WKWebViewConfiguration WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init]; [config.userContentController addUserScript:script]; _webView = [[WKWebView alloc] initWithFrame:self.view.bounds configuration:config]; [_webView loadHTMLString:@”http://www.nsu.edu.cn/v/2014v3/img/background/3.jpg’ />”baseURL:nil]; [self.view addSubview:_webView]; 五、webView 执行JS代码 用户调用用JS写过的代码,一般指服务端开发的:
//javaScriptString是JS方法名,completionHandler是异步回调block [self.webView evaluateJavaScript:javaScriptString completionHandler:completionHandler];
六、JS调用App注册过的方法 在WKWebView里面注册供JS调用的方法,是通过WKUserContentController类下面的方法:
(void)addScriptMessageHandler:(id )scriptMessageHandler name:(NSString *)name; scriptMessageHandler是代理回调,JS调用name方法后,OC会调用scriptMessageHandler指定的对象。
JS在调用OC注册方法的时候要用下面的方式:
window.webkit.messageHandlers..postMessage() 注意,name(方法名)是放在中间的,在这里个人理解该name可以理解为一个标识,该标识将OC本地的实例对象绑定到JS中,将messageBody只能是一个对象,如果要传多个值,需要封装成数组,或者字典。整个示例如下:
//OC注册供JS调用的方法 [[_webView configuration].userContentController addScriptMessageHandler:self name:@”app”];
//OC在JS调用方法做的处理 - (void)userContentController:(WKUserContentController )userContentController didReceiveScriptMessage:(WKScriptMessage )message { NSLog(@”JS 调用了 %@ 方法,传回参数 %@”,message.name,message.body); }
//JS调用 window.webkit.messageHandlers.app.postMessage(null); 最后:
简单做一个总结,在iOS7以前我们只能使用UIWebView,所以在js交互中只能通过stringByEvaluatingJavaScriptFromString进行本地调用H5,而H5端调用本地多采用URLSchemes方式(解耦—Hybrid H5跨平台性思考),
iOS7之后使用UIWebView则可以使用JavaScriptCore框架,通过JSContext进行JS交互。 iOS8之后可以使用WKWebView本身的框架,毕竟WKWebView本身已经优化很多,并且提供了更多的方法和协议,不过注意一点的是在WKWebView中鉴于一些线程和进程的问题是无法获取JSContext的。
地址:http://www.w2bc.com/article/159394
你可能感兴趣的:(WebView)
uniapp中使用webview并与原页面通信
数学分析分析什么?
uni-app
uniapp中使用webview并与原页面通信1.接收数据主要使用@message与@onPostMessage接收原页面数据,且两个方法只能在APP中使用,其他平台均不支持。/***接收页面返回参数*@param{Object}item*/htmlMessage(item){console.log('收到的消息',item)letdata=item.detail...},2.发送数据(调用原页面
基于 ArkTS 的混合式开发示例:静态页面与本地数据交互
qq_55376032
harmonyos 华为 鸿蒙
一、实现效果1、H5段混合式开发效果图2、静态页面与本地数据交互效果图二、技术栈分析ArkTS:用于构建页面结构和逻辑,支持声明式UI和组件化开发。WebView:通过@ohos.web.webview调用H5页面,支持JavaScript交互。资源管理:使用@kit.ArkTS的util模块读取并解析本地JSON文件。自定义对话框:通过@CustomDialog实现自定义弹窗,支持动态数据加载。
WebView·开车指南
writeapoemforyou
北京市东城区首席Bug布道师开山之作,一整月交通事故血泪经验,教你如何快速成为‘伪’老司机,开启WebView飙车之旅。Tips由于WebView的用法实在太多,如果您只是想查询某个功能的使用——建议Ctrl+F(Commad+F)在本页面搜索关键字查找。文章给前半部分大多是方法的介绍,若嫌琐碎可直接拖到最后看代码演示。Thanksforreading~!٩(♡ε♡)۶前言喝酒不开车,开车不喝酒。
最新微信小程序面试题集结
江湖二哥
微信小程序 前端 面试 小程序
1、微信小程序与H5的区别?第一条是运行环境的不同传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览器,是微信开发团队基于浏览器内核完全重构的一个内置解析器,针对小程序专门做了优化,配合自己定义的开发语言标准,提升了小程序的性能。第二条是开发成本的不同只在微信中运行,所以不用再去顾虑浏览器兼容性,不用担心生产环境中出现不可预料的奇妙BuG第三条是获取系统级
android webview 高度随内容改变,android app内置webview,随android版本升级进程关系的变化...
大圣南佳境
android webview 高度随内容改变
Q最近遇到一个问题:多个应用打不开,闪退。A调查发现闪退的应用都在首屏加载了webview,而在androidp上webview的渲染是在另外一个进程上进行的,进程名字类似webview:sandboxed_process0,这个进程是由webview_zygote这样一个进程fork出来的,而webview_zygote由于缺少权限runtime崩溃,从而导致webview加载失败,应用闪退。S
flutter 专题 七十九 Flutter使用JsBridge方式处理Webview与H5通信
leluckys
Flutter面试与实战 flutter
目前,移动跨平台开发作为移动开发的重要组成部分,是移动开发者必须掌握的技能,也是自我提升的重要手段。作为Google推出的跨平台技术方案,Flutter具有诸多的优势,已经或正在被广大开发者应用在移动应用开发中。在过去的2019年,我看到越来越多的公司和个人开始使用Flutter来开发跨平台应用,对于移动应用开发来说,Flutter能够满足几乎所有的业务开发需求,所以,学习Flutter正当时。众
构建JSBridge鸿蒙示例代码
本文原创发布在华为开发者社区。介绍本示例实现了简单的JSBridge,使H5和原生两侧可以互相调用对方的方法。构建JSBridge源码链接效果预览使用说明打开应用后,点击调用native按钮,实现原生方面调用H5方法,在后台打印数据。实现思路原生调H5invokeHandle(handleName:string,callbackName:string){try{this.webviewContro
python启动多个进程_Python多进程运行两次进程?
魔法小药丸
python启动多个进程
运行下面的python3脚本,由于某种原因我无法理解startWebview函数执行了两次,结果打开了两个PyWebView窗口。#ImportModulesHereimportosimporttimeimportwebviewimportos.pathimportmultiprocessingfromdotenvimportload_dotenvfromflask_wtfimportFlaskF
180.HTML、CSS、JavaScript
我也念过晚霞
html css javascript
———————————————————————————————【1.引言】在Android开发过程中,前端技术(HTML、CSS、JavaScript)逐渐成为不可或缺的技能之一。无论是通过WebView显示网页内容,还是构建混合应用,掌握前端基础将有助于提升整体产品体验。本文在保证内容全面性的前提下,剔除了多余的推荐信息,直接进入技术核心讲解。通过详细介绍HTML、CSS与JavaScript的
webView的使用以及总结
xjbclz
Android-综合
转自:http://www.360doc.com/content/14/0611/13/15210553_385676271.shtmlWebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:第一种方法的步骤:1.在要Activity中实例化WebView组件:WebViewwebView=newWebVi
qt.network.ssl: QSslSocket: cannot call unresolved function 问题解决
清海风缘
Qt qt.network.ssl
转:Qt5.4.2实现一个简单的浏览器及相关问题的解决首先,介绍一下我使用的Qt版本:QtCreator3.4.1(opensource)BasedonQt5.4.2(MSVC2013,32bit)BuiltonMay28201519:07:19运行平台为Windows。至于linux平台,以后再说吧。主要使用的是Qt中的QtWebKit和QWebView。这里Qt5做了相应的调整,可视化的QWe
webView2 隐藏滚动条
雾散睛明
WebView2 webview2 隐藏滚动条
参考:wenview2隐藏滚动条查看该链接内容,得知其主要是通过css修改body的overflow属性为:hide.这里贴出原链接的解决方案:privatevoidWebView2_NavigationCompleted(objectsender,CoreWebView2NavigationCompletedEventArgse){if(e.IsSuccess){((WebView2)sende
C# 如何使用 webview2 调用本地html文件
花咔咔
c#
1.下载Microsoft.Web.WebView22.工具箱里面会出现一个webview2的控件3.把这个控件拖到窗体上4.写如下代码://窗体装载事件privatevoidProductChartForm_Load(objectsender,EventArgse){this.webView2_main.CoreWebView2InitializationCompleted+=newEventH
Tauri+React跨平台开发全场景问题解析
i建模
前端开发 跨平台开发 前端框架 tauri react 跨平台开发
Tauri+React跨平台开发全场景问题解析一、核心优势与技术定位1.1技术架构创新Tauri2.3.1采用Rust核心层+系统WebView+React前端的混合架构,相较于传统跨平台方案具有三大突破:轻量化:安装包体积缩小至Electron的3%({invoke('load_data').then(setData);},[]);return{data};}特点:ReactHooks与Taur
鸿蒙 Next 开发实践:使用 WebView 适配移动端网站
淼学派对
2025鸿蒙学习资源讲解 harmonyos 华为
在移动应用开发中,有时我们需要将已有的移动端网站嵌入到原生应用中,以实现快速开发和功能扩展。鸿蒙Next提供了强大的WebView组件,可以轻松实现这一目标。本文将通过一个简单的示例,展示如何在鸿蒙Next应用中使用WebView适配已经做好的移动端网站。效果图场景背景假设我们已经有一个移动端网站,例如一个查询系统https://lefu.lesaosao.cn/chaxun/#/Indexhtt
IOS-iphone端WKWebView开发者模式
Gaos的BLOG
IOS开发 ios iphone safari
WKWebView调试App内嵌网页手机端开启Web检查器:设置->通用->Safari->高级->Web检查器Mac端Safari显示开发菜单:Safari浏览器->偏好设置->高级->勾选在菜单中显示“开发”设置启动APP,加载WKWebView后即可在Mac端看到H5页面。这时即可连接手机通过Safari中进行调试,Safari开发中看到设备,可以查看当前的HTML代码,JS代码,网络情况等
关于uniapp和H5的通信交互传参问题
水水水水水水水水水水水
uni-app 交互
在h5index.html中引入1.在uniapp中创建webview通信的vue页面2.h5通信webview中绑定@messageuvue中绑定@onmessage3.h5组件中获取从uniapp传过来的参数(生命周期中获取)constqueryString=window.location.search;//使用URLSearchParams对象解析查询字符串consturlParams=ne
Flutter接入FlutterBoost进行跳转,并实现Flutter与Native的通信
氦客
跨平台移动开发 Flutter FlutterBoost Android 接入 跳转
FlutterBoost是什么FlutterBoost是阿里系闲鱼技术团队开源的Flutter插件。FlutterBoost的理念是将Flutter像Webview那样来使用。在现有应用程序中同时管理Native页面和Flutter页面并非易事,FlutterBoost帮你处理页面的映射和跳转,使你只需关心页面的名字和参数即可(通常可以是URL)。如何接入FlutterBoost一般参考Flutt
鸿蒙ArkTS页面如何与H5页面交互?
先看效果功能介绍点击ClickMe按钮可以接收展示鸿蒙传递给html的内容点击霓虹灯按钮可以同步更新底部鸿蒙页面的按钮内容“打开”或“关闭”点击底部鸿蒙页面的按钮,可以同步修改html的霓虹灯按钮状态前言在开发App时,我们经常会遇到使用webView加载H5页面的场景,这样做的好处就不多加赘述了,那么鸿蒙App如何加载H5页面呢?又怎么与H5页面进行通信呢?,废话少说,直接上代码。通信功能介绍A
android开发:web页面唤起其他应用app
士心山
Android webview android webview 网页唤醒app
如何在webview加载的网页,唤醒其他应用app?具体步骤:第一步:打开AndroidMenifest.xml文件,添加下面代码关键代码:第二步:创建html文件,测试启动应用程序格式:启动应用程序各个项目含义如下所示:scheme:判别启动的App。host:适当记述path:传值时必须的key※没有也可以query:获取值的Key和Value※没有也可以参考网站详解如何通过H5(浏览器/We
鸿蒙5.0实战案例:基于webView的嵌套滚动
敢嗣先锋
鸿蒙开发 移动开发 HarmonyOS harmonyos 鸿蒙开发 移动开发 ArkUI 组件化 WebView Web组件
往期推文全新看点(文中附带全新鸿蒙5.0全栈学习笔录)✏️鸿蒙(HarmonyOS)北向开发知识点记录~✏️鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~✏️鸿蒙应用开发与鸿蒙系统开发哪个更有前景?✏️嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~✏️对于大前端开发来说,转鸿蒙开发究竟是福还是祸?✏️鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?✏️记录一场鸿蒙开发岗位面
Auto.js学习笔记1:开发需要准备什么工具和编程语言知识?
PYB3
Auto.js # 学习 # 实战 android javascript vscode
什么是Auto.js?根据官方文档定义:Auto.js是一款无需root权限的JavaScript自动化软件。Auto.js是一款安卓手机的应用主要用webview,和微信一样,安装在手机上;Auto.js是开发app脚本(自动化操作、引流脚本、游戏脚本、简单app);Auto.js脚本开发语言是JavaScript;Auto.js看作手机版本的按键精灵就全明白了,但又不能局限于按键精灵(自行补脑
Android仿人人客户端(v5(2)
2401_87555477
android harmonyos 华为
@OverrideprotectedvoidsetupView(){mTopNavbar=(TopNavbar)findViewById(R.id.rl_top_navbar);mWebView=(WebView)findViewById(R.id.wv_auth);mWebView.setVerticalScrollBarEnabled(false);mWebView.setHorizontal
【uniapp*vue3】app/h5 webview通讯方案
imsopoor
uni-app
本文旨在解决vue3版本下uniapph5项目向app项目中webview通讯问题问题产生于uniapp不支持vue3使用template.h5.html自定义打包模板h5向app发送信息有很多文章指出h5项目使用uni.postmessage这个api需要在template.h5.html引入一个js文件然后改下webuni变量再从manifest.json配置下改文件就可以全文使用了vue2环
flutter 怎么拦截请求_Flutter webview 使用和交互
weixin_39779975
flutter 怎么拦截请求
flutter.png在Flutter中使用webview,在pub.dev中查看,有几个组件都可以使用webviewflutter_webview.png本文使用的是webview_flutter,它是Flutter团队开发的,目前还不是正式版,但已经可以使用。在iOS中底层调用的是WKWebView,在Android中底层调用的是WebView。webview_flutter使用WebView
WebView 细节,onShowCustomView与JS注入来实现视频全屏播放
Boo_Wang
Android基础 WebView 视频播放 硬件加速
概述WebView是开发中经常使用的组件,在使用中我们需要考虑文件下载,自定义scheme,重定向,硬件加速,Cookie,HTTPS/HTTP混合等多种问题。关于WebView之前的总结AndroidWebView使用,Http/Https,硬件加速等相关细节详解Androidhybrid之JS与Native的通信方式更多参考:AndroidWebview实现文件下载功能Android5.0We
Android. WebView出现net::ERR_UNKNOWN_URL_SCHEME错误
沙漠蓝色披头
小技巧 webview android
1.仔细观察图中url可以发现这是一个自定协议的url,究其原因,就是拦截webview中的url,如果url是自定义协议(如:tel,weixin,alipays等等)开头的,就url转换成原生调用(intent跳转),因为webview只能识别http,https这样的协议.webview其实就相当于pc端的浏览器,遇到http/https开头的url时会向host发起一个请求,而遇到自定义的
百度极速版APP 自动脚本 javascript代码
zaxjb123
dubbo
使用JavaScript编写针对百度极速版APP的自动化脚本通常涉及到使用WebView测试框架,比如Puppeteer或Selenium,这些工具允许你控制一个浏览器或WebView环境,从而与网页或APP中的Web内容进行交互。然而,对于原生APP(如百度极速版)的自动化测试,通常需要使用专门的移动应用自动化框架,如Appium。Appium支持多种编程语言,包括JavaScript。要使用J
Flutter学习
T_yoo_csdn
Flutter 前端 Flutter
flutter环境搭建mac版Flutter中文网Flutter原理及美团的实践背景Flutter的目标是使同一套代码同时运行在Android和iOS系统上,并且拥有媲美原生应用的性能,Flutter甚至提供了两套控件来适配Android和iOS(滚动效果、字体和控件图标等等),为了让App在细节处看起来更像原生应用。在Flutter诞生之前,已经有许多跨平台UI框架的方案,比如基于WebView
基于自定义WebView实现H5混合开发
小二李
Flutter Flutter 组件封装 flutter webview
pubspec.yaml添加webview插件flutter_webview_plugin:^0.4.0webview.dart基于webview的组件封装constCATCH_URLS=['m.ctrip.com/','m.ctrip.com/html5/','m.ctrip.com/html5'];classWebViewextendsStatefulWidget{finalStringurl
java解析APK
3213213333332132
java apk linux 解析APK
解析apk有两种方法
1、结合安卓提供apktool工具,用java执行cmd解析命令获取apk信息
2、利用相关jar包里的集成方法解析apk
这里只给出第二种方法,因为第一种方法在linux服务器下会出现不在控制范围之内的结果。
public class ApkUtil
{
/**
* 日志对象
*/
private static Logger
nginx自定义ip访问N种方法
ronin47
nginx 禁止ip访问
因业务需要,禁止一部分内网访问接口, 由于前端架了F5,直接用deny或allow是不行的,这是因为直接获取的前端F5的地址。
所以开始思考有哪些主案可以实现这样的需求,目前可实施的是三种:
一:把ip段放在redis里,写一段lua
二:利用geo传递变量,写一段
mysql timestamp类型字段的CURRENT_TIMESTAMP与ON UPDATE CURRENT_TIMESTAMP属性
dcj3sjt126com
mysql
timestamp有两个属性,分别是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP两种,使用情况分别如下:
1.
CURRENT_TIMESTAMP
当要向数据库执行insert操作时,如果有个timestamp字段属性设为
CURRENT_TIMESTAMP,则无论这
struts2+spring+hibernate分页显示
171815164
Hibernate
分页显示一直是web开发中一大烦琐的难题,传统的网页设计只在一个JSP或者ASP页面中书写所有关于数据库操作的代码,那样做分页可能简单一点,但当把网站分层开发后,分页就比较困难了,下面是我做Spring+Hibernate+Struts2项目时设计的分页代码,与大家分享交流。
1、DAO层接口的设计,在MemberDao接口中定义了如下两个方法:
public in
构建自己的Wrapper应用
g21121
rap
我们已经了解Wrapper的目录结构,下面可是正式利用Wrapper来包装我们自己的应用,这里假设Wrapper的安装目录为:/usr/local/wrapper。
首先,创建项目应用
&nb
[简单]工作记录_多线程相关
53873039oycg
多线程
最近遇到多线程的问题,原来使用异步请求多个接口(n*3次请求) 方案一 使用多线程一次返回数据,最开始是使用5个线程,一个线程顺序请求3个接口,超时终止返回 缺点 测试发现必须3个接
调试jdk中的源码,查看jdk局部变量
程序员是怎么炼成的
jdk 源码
转自:http://www.douban.com/note/211369821/
学习jdk源码时使用--
学习java最好的办法就是看jdk源代码,面对浩瀚的jdk(光源码就有40M多,比一个大型网站的源码都多)从何入手呢,要是能单步调试跟进到jdk源码里并且能查看其中的局部变量最好了。
可惜的是sun提供的jdk并不能查看运行中的局部变量
Oracle RAC Failover 详解
aijuans
oracle
Oracle RAC 同时具备HA(High Availiablity) 和LB(LoadBalance). 而其高可用性的基础就是Failover(故障转移). 它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。
Oracle 10g RAC 的Failover 可以分为3种:
1. Client-Si
form表单提交数据编码方式及tomcat的接受编码方式
antonyup_2006
JavaScript tomcat 浏览器 互联网 servlet
原帖地址:http://www.iteye.com/topic/266705
form有2中方法把数据提交给服务器,get和post,分别说下吧。
(一)get提交
1.首先说下客户端(浏览器)的form表单用get方法是如何将数据编码后提交给服务器端的吧。
对于get方法来说,都是把数据串联在请求的url后面作为参数,如:http://localhost:
JS初学者必知的基础
百合不是茶
js函数 js入门基础
JavaScript是网页的交互语言,实现网页的各种效果,
JavaScript 是世界上最流行的脚本语言。
JavaScript 是属于 web 的语言,它适用于 PC、笔记本电脑、平板电脑和移动电话。
JavaScript 被设计为向 HTML 页面增加交互性。
许多 HTML 开发者都不是程序员,但是 JavaScript 却拥有非常简单的语法。几乎每个人都有能力将小的
iBatis的分页分析与详解
bijian1013
java ibatis
分页是操作数据库型系统常遇到的问题。分页实现方法很多,但效率的差异就很大了。iBatis是通过什么方式来实现这个分页的了。查看它的实现部分,发现返回的PaginatedList实际上是个接口,实现这个接口的是PaginatedDataList类的对象,查看PaginatedDataList类发现,每次翻页的时候最
精通Oracle10编程SQL(15)使用对象类型
bijian1013
oracle 数据库 plsql
/*
*使用对象类型
*/
--建立和使用简单对象类型
--对象类型包括对象类型规范和对象类型体两部分。
--建立和使用不包含任何方法的对象类型
CREATE OR REPLACE TYPE person_typ1 as OBJECT(
name varchar2(10),gender varchar2(4),birthdate date
);
drop type p
【Linux命令二】文本处理命令awk
bit1129
linux命令
awk是Linux用来进行文本处理的命令,在日常工作中,广泛应用于日志分析。awk是一门解释型编程语言,包含变量,数组,循环控制结构,条件控制结构等。它的语法采用类C语言的语法。
awk命令用来做什么?
1.awk适用于具有一定结构的文本行,对其中的列进行提取信息
2.awk可以把当前正在处理的文本行提交给Linux的其它命令处理,然后把直接结构返回给awk
3.awk实际工
JAVA(ssh2框架)+Flex实现权限控制方案分析
白糖_
java
目前项目使用的是Struts2+Hibernate+Spring的架构模式,目前已经有一套针对SSH2的权限系统,运行良好。但是项目有了新需求:在目前系统的基础上使用Flex逐步取代JSP,在取代JSP过程中可能存在Flex与JSP并存的情况,所以权限系统需要进行修改。
【SSH2权限系统的实现机制】
权限控制分为页面和后台两块:不同类型用户的帐号分配的访问权限是不同的,用户使
angular.forEach
boyitech
AngularJS AngularJS API angular.forEach
angular.forEach 描述: 循环对obj对象的每个元素调用iterator, obj对象可以是一个Object或一个Array. Iterator函数调用方法: iterator(value, key, obj), 其中obj是被迭代对象,key是obj的property key或者是数组的index,value就是相应的值啦. (此函数不能够迭代继承的属性.)
java-谷歌面试题-给定一个排序数组,如何构造一个二叉排序树
bylijinnan
二叉排序树
import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4,
action执行2次
Chen.H
JavaScript jsp XHTML css Webwork
xwork 写道 <action name="userTypeAction"
class="com.ekangcount.website.system.view.action.UserTypeAction">
<result name="ssss" type="dispatcher">
[时空与能量]逆转时空需要消耗大量能源
comsci
能源
无论如何,人类始终都想摆脱时间和空间的限制....但是受到质量与能量关系的限制,我们人类在目前和今后很长一段时间内,都无法获得大量廉价的能源来进行时空跨越.....
在进行时空穿梭的实验中,消耗超大规模的能源是必然
oracle的正则表达式(regular expression)详细介绍
daizj
oracle 正则表达式
正则表达式是很多编程语言中都有的。可惜oracle8i、oracle9i中一直迟迟不肯加入,好在oracle10g中终于增加了期盼已久的正则表达式功能。你可以在oracle10g中使用正则表达式肆意地匹配你想匹配的任何字符串了。
正则表达式中常用到的元数据(metacharacter)如下:
^ 匹配字符串的开头位置。
$ 匹配支付传的结尾位置。
*
报表工具与报表性能的关系
datamachine
报表工具 birt 报表性能 润乾报表
在选择报表工具时,性能一直是用户关心的指标,但是,报表工具的性能和整个报表系统的性能有多大关系呢?
要回答这个问题,首先要分析一下报表的处理过程包含哪些环节,哪些环节容易出现性能瓶颈,如何优化这些环节。
一、报表处理的一般过程分析
1、用户选择报表输入参数后,报表引擎会根据报表模板和输入参数来解析报表,并将数据计算和读取请求以SQL的方式发送给数据库。
2、
初一上学期难记忆单词背诵第一课
dcj3sjt126com
word english
what 什么
your 你
name 名字
my 我的
am 是
one 一
two 二
three 三
four 四
five 五
class 班级,课
six 六
seven 七
eight 八
nince 九
ten 十
zero 零
how 怎样
old 老的
eleven 十一
twelve 十二
thirteen
我学过和准备学的各种技术
dcj3sjt126com
技术
语言VB https://msdn.microsoft.com/zh-cn/library/2x7h1hfk.aspxJava http://docs.oracle.com/javase/8/C# https://msdn.microsoft.com/library/vstudioPHP http://php.net/manual/en/Html
struts2中token防止重复提交表单
蕃薯耀
重复提交表单 struts2中token
struts2中token防止重复提交表单
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2015年7月12日 11:52:32 星期日
ht
线性查找二维数组
hao3100590
二维数组
1.算法描述
有序(行有序,列有序,且每行从左至右递增,列从上至下递增)二维数组查找,要求复杂度O(n)
2.使用到的相关知识:
结构体定义和使用,二维数组传递(http://blog.csdn.net/yzhhmhm/article/details/2045816)
3.使用数组名传递
这个的不便之处很明显,一旦确定就是不能设置列值
//使
spring security 3中推荐使用BCrypt算法加密密码
jackyrong
Spring Security
spring security 3中推荐使用BCrypt算法加密密码了,以前使用的是md5,
Md5PasswordEncoder 和 ShaPasswordEncoder,现在不推荐了,推荐用bcrpt
Bcrpt中的salt可以是随机的,比如:
int i = 0;
while (i < 10) {
String password = "1234
学习编程并不难,做到以下几点即可!
lampcy
java html 编程语言
不论你是想自己设计游戏,还是开发iPhone或安卓手机上的应用,还是仅仅为了娱乐,学习编程语言都是一条必经之路。编程语言种类繁多,用途各 异,然而一旦掌握其中之一,其他的也就迎刃而解。作为初学者,你可能要先从Java或HTML开始学,一旦掌握了一门编程语言,你就发挥无穷的想象,开发 各种神奇的软件啦。
1、确定目标
学习编程语言既充满乐趣,又充满挑战。有些花费多年时间学习一门编程语言的大学生到
架构师之mysql----------------用group+inner join,left join ,right join 查重复数据(替代in)
nannan408
right join
1.前言。
如题。
2.代码
(1)单表查重复数据,根据a分组
SELECT m.a,m.b, INNER JOIN (select a,b,COUNT(*) AS rank FROM test.`A` A GROUP BY a HAVING rank>1 )k ON m.a=k.a
(2)多表查询 ,
使用改为le
jQuery选择器小结 VS 节点查找(附css的一些东西)
Everyday都不同
jquery css name选择器 追加元素 查找节点
最近做前端页面,频繁用到一些jQuery的选择器,所以特意来总结一下:
测试页面:
<html>
<head>
<script src="jquery-1.7.2.min.js"></script>
<script>
/*$(function() {
$(documen
关于EXT
tntxia
ext
ExtJS是一个很不错的Ajax框架,可以用来开发带有华丽外观的富客户端应用,使得我们的b/s应用更加具有活力及生命力。ExtJS是一个用 javascript编写,与后台技术无关的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各种开发语言开发的应用中。
ExtJs最开始基于YUI技术,由开发人员Jack
一个MIT计算机博士对数学的思考
xjnine
Math
在过去的一年中,我一直在数学的海洋中游荡,research进展不多,对于数学世界的阅历算是有了一些长进。为什么要深入数学的世界?作为计算机的学生,我没有任何企图要成为一个数学家。我学习数学的目的,是要想爬上巨人的肩膀,希望站在更高的高度,能把我自己研究的东西看得更深广一些。说起来,我在刚来这个学校的时候,并没有预料到我将会有一个深入数学的旅程。我的导师最初希望我去做的题目,是对appe