目前,黄金波视频冲击波直播平台台已经为多少企业提供过直播技术支持?

2015年2月 Java大版内专家分月排行榜第二2014年3月 Java大版内专家分月排行榜第二
2014年9月 Java大版内专家分月排行榜第三2014年6月 Java大版内专家分月排行榜第三2014年2月 Java大版内专家分月排行榜第三2013年11月 Java大版内专家分月排行榜第三2013年10月 Java大版内专家分月排行榜第三
2013年10月 总版技术专家分月排行榜第三
2014年3月 Java大版内专家分月排行榜第一2014年1月 Java大版内专家分月排行榜第一2013年12月 Java大版内专家分月排行榜第一2013年11月 Java大版内专家分月排行榜第一2013年10月 Java大版内专家分月排行榜第一
2016年1月 Java大版内专家分月排行榜第二2015年12月 Java大版内专家分月排行榜第二2015年8月 Java大版内专家分月排行榜第二2015年3月 Java大版内专家分月排行榜第二2015年1月 Java大版内专家分月排行榜第二2014年12月 Java大版内专家分月排行榜第二2014年11月 Java大版内专家分月排行榜第二2014年6月 Java大版内专家分月排行榜第二2014年4月 Java大版内专家分月排行榜第二2014年1月 Java大版内专家分月排行榜第二2013年11月 Java大版内专家分月排行榜第二
2015年9月 Java大版内专家分月排行榜第三2015年6月 Java大版内专家分月排行榜第三2015年5月 Java大版内专家分月排行榜第三2015年2月 Java大版内专家分月排行榜第三2014年3月 Java大版内专家分月排行榜第三2013年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。openwebkitsharp或者webkit.net如何与js进行交互?
openwebkitsharp或者webkit.net如何与js进行交互?&
js调用C#方法,或者C#调用js方法
如果能给demo看最好了。Android 与 JS 交互、互调方法 - 推酷
Android 与 JS 交互、互调方法
对于试水的功能,一般公司都会采用H5的方式来开发,可以用很少的资源与很短的项目工期来完成。
但许多情况下,H5页面会需要一些原生持有的一些如用户信息之类的数据,一些交互也需要调用原生的,如toast之类要保持同一个手机风格一致的交互行为。这个时候就需要能够让JS主动调用原生的方法来进行操作或者获取数据。或者是原生调用JS的方法在H5加载的时候传递一些参数。
对于原生调用JS的方法
我们需要实现一个WebViewClient,在这个WebViewClient里面进行JS方法加载的替换
webView_.setWebViewClient(new WebViewClient() {
public void onPageFinished(WebView view, String url) {
view.loadUrl(MessageFormat.format(&javascript:initEvaluationPage({0})&,
Util.wrapGetParameter(json)
这里的initEvaluationPage必须要和JS的方法名一致
建议传递json格式数据作为参数。
不要忘了允许WebView执行JS代码
webView_.getSettings()s.setJavaScriptEnabled(true);
对于JS调用原生方法,稍微复杂一些
首先,需要本地定义一个接口,接口名需要和JS内写的一致
比如JS需要客户端保存的用户信息
JS中代码是这样的
var userInfo = JSON.parse(window.JSUserInfoInterface.getUserInfo());
那么我们本地也需要定义一个对应的接口
public interface JSUserInfoInterface {
@JavascriptInterface
String getUserInfo();
接口名方法名一致
实例化这个接口,在实例方法内返回我们的用户信息
JSUserInfoInterface method3 = new JSUserInfoInterface() {
@JavascriptInterface
public String getUserInfo() {
SharedPreferences sharedPreferences = getActivity().getApplicationContext().getSharedPreferences(
&share&, Context.MODE_PRIVATE);
String tel = sharedPreferences.getString(Constant.KEY_USERNAME, &&);
String userid = sharedPreferences.getString(&userid&, &&);
return &{\&user_id\&:\&& + userid + &\&,\&user_tel\&:\&& + tel + &\&}&;
注意不能忘了 @JavascriptInterface注解
然后将这个接口方法加入到webView_中,注意第二个参数就是接口名,需要和JS中的一致。
webView_.addJavascriptInterface(method3, &JSUserInfoInterface&);
这样就可以在JS调用
window.JSUserInfoInterface.getUserInfo()
的时候返回我们实例里面给的数据
同样的,我们也可以不返回数据直接执行。比如弹一个原生的Dialog。
需要注意的是JS里面是没有主线程子线程的概念的,当JS进行网络请求的时候,webview会默认给他开子线程。具体机制大家感兴趣可以去了解。不过这也就意味着你不能直接在给JS掉的原生方法中进行UI操作。你可以选择发送给主线程执行。
比如下面的代码我是用rxjava来切换线程的
JSDialogInterface method2 = new JSDialogInterface() {
@JavascriptInterface
public void changeDialog(String arg0) {
Observable.just(arg0)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mess -& {
if (mess.equals(&show&)) {
ld_.show();
ld_.dismiss();
一点小建议
如果你的项目中有很多或者一定数量的JS交互,建议写一个有返回值的接口。然后通过JSON参数来进行控制。内部制定一个解析协议,根据JSON的数据来决定要做什么事,避免大量定义接口 ,也避免构建太多的实例消耗资源
有什么意见和疑惑欢迎留言
如果我的博客对您有帮助,请点个赞吧
我建了一个QQ群(群号:),用于大家讨论交流Android技术问题,有兴趣的可以加下,大家一起进步。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致今天看啥 热点:
iOS: JS和Native交互的两种方法,iosjsnative交互背景:
UIWebView: iOS 用来展示 web 端内容的控件。
1. 核心方法:
- (NSString*)stringByEvaluatingJavaScriptFromString:(NSString *)
script 就是 JS 代码,返回结果为 js 执行结果。 比如一个 JS function 为
function testFunction(abc){
webview 调用此 JS 代码如下:
NSString *js = @"testFunction('abc')";
NSString *result = [webView stringByEvaluatingJavaScriptFromString:js];
2. 重要回调:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationT
webview 每当需要去加载一个 request 就先回调这个方法,让上层决定是否 加载。一般在这里截获,进行本地的处理。
Native 调用 JS:
本质就一个方法,通过 stringByEvaluatingJavaScriptFromString,都是同步。
下面重点说说JS怎么回调Native:
1.通常方法:js修通过改doucument的loaction或者新建一个看不见的iFrame,修改它的 src,就会触发回调 webView 的 shouldStartLoadWithRequest,参数 request 的 url 就是新赋值的 location 或者 url,上层截获这个 url 的参数,对此分发即可。 这个都是异步调用的。
如 JS function:
var messagingI
messagingIframe = document.createElement('iframe');
messagingIframe.style.display = 'none';
document.documentElement.appendChild(messagingIframe);
function TestIOSJS(){
messagingIframe.src = "ios/test/click";
当触发上面的JS时,webview会收到下面的回调:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSString *url = request.URL.absoluteS
if([url hasSuffix:@"ios/test/click"]){
//do something you want
return NO;
return YES;
通过截获这个request的参数就可以做native需要做的事情。
有个开源的代码挺不错的,大家可以看看:/marcuswestin/WebViewJavascriptBridge
2.通过XMLHttpRequest:
  (1) Native子类化一个NSURLProtocol类,并通过[NSURLProtocol registerClass:self];把自己注册。
  (2) JS function 创建一个 XMLHttpRequest 对象,然后可以设置携带的参数,设置同步或者异步,然后通过 send 发送请求。
function iOSExec(){
var execXhr = new XMLHttpRequest();
execXhr.open('HEAD', "/!test_exec?" + (+new Date()), true); //设置scheme
var vcHeaderValue = /.*\((.*)\)/.exec(navigator.userAgent)[1];
execXhr.setRequestHeader('vc', vcHeaderValue);//设置参数等
execXhr.setRequestHeader('rc', 1);
// 发起请求
execXhr.send(null);
  (3) 因为步骤1已经把自己注册,所以每个客户端的网络请求都会请求这个类 的+(BOOL)canInitWithRequest:(NSURLRequest *)request,让此决定是否需要生成这个request。
@implementation TestURLProtocol
+(void)initProtocol
[NSURLProtocol registerClass:self];
+(BOOL)canInitWithRequest:(NSURLRequest *)request{
NSString *url = request.URL.absoluteS
if([url containsString:@"!test_exec"]){
//do something
return NO;
  (4) 通过获取这个request的参数,上层可以进行拦截,然后进行本地的相 关操作。&
这个方法比较少用,不过能解决JS同步回调Native的方法。
这里也有一个开源库,大家可以看一下:/apache/cordova-ios/tree/master/CordovaLib
要想明白你的问题,首先的知道app的分类,app通常被分为3类:webapp:用html css 和js开发的运行在服务器端的app;Native app:根据手机系统的默认开发语言开发的apphybrid app:基于两者之间的app而你在问题里说的webapp本身就是一个用手机访问的网站,部署在服务器端,不需要安装,直接通过浏览器访问的,如果是需要安装的app,可以百度一下后面两种,你应该就会明白了。满意请采纳。
function getFrame(frameId){
if (typeof window.my_iframe == &undefined&) {
window.my_iframe = document.getElementById(frameId);
if (typeof window.my_iframe == &undefined&)
throw &fatal: iframe object not found&;
return window.my_}function getFrameWin(){
var f = getFrame();
var win = f.contentWindow || f.contentD}function getFrameDoc(){
var win = getFrameWin();
return win.contentDocument || win.}var doc = getFrameDoc();doc.body.getElementById('div1').style.display = 'block';
暂无相关文章
相关搜索:
相关阅读:
相关频道:
IOS教程最近更新

我要回帖

更多关于 黄金波直播平台 的文章

 

随机推荐