您的位置:

webviewjs发请求(webview的网络请求)

webviewjs发请求(webview的网络请求)

更新:

本文目录一览:

WKWebView js方法的使用

一、h5 调用 OC,给OC传值

   1、在WKWebview初始化的时候,先注册JS方法

       //这个类主要用来做native与JavaScript的交互管理

       WKUserContentController * wkUController = [[WKUserContentController alloc] init];

        //注册一个name为jsToOcNoPrams的js方法,设置处理接收JS方法的代理

        [wkUController addScriptMessageHandler:self  name:@"jsToOcNoPrams"];

       [wkUController addScriptMessageHandler:self name:@"jsToOcWithPrams"];

        config.userContentController = wkUController;

2、拦截js方法,接收参数

注意:遵守WKScriptMessageHandler协议,代理是由WKUserContentControl设置

  //通过接收JS传出消息的name进行捕捉的回调方法

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{

    NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo);

    //用message.body获得JS传出的参数体

    NSDictionary * parameter = message.body;

    //JS调用OC

    if([message.name isEqualToString:@"jsToOcNoPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:@"不带参数" preferredStyle:UIAlertControllerStyleAlert];

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])];

        [self presentViewController:alertController animated:YES completion:nil];

    }else if([message.name isEqualToString:@"jsToOcWithPrams"]){

        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:parameter[@"params"] preferredStyle:UIAlertControllerStyleAlert];

        [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

        }])];

        [self presentViewController:alertController animated:YES completion:nil];

    }

}

3、在webview释放注销之前移除js方法

      //移除注册的js方法

        [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"];

二、oc调用H5,给H5传值

1、//OC调用JS changeColor()是JS方法名,completionHandler是异步回调block

    NSString *jsString = [NSString stringWithFormat:@"changeColor('%@')", @"Js参数"];

    [_webView evaluateJavaScript:jsString completionHandler:^(id _Nullable data, NSError * _Nullable error) {

        NSLog(@"改变HTML的背景色");

    }];

//改变字体大小 调用原生JS方法

    NSString *jsFont = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", arc4random()%99 + 100];

    [_webView evaluateJavaScript:jsFont completionHandler:nil];

2、// 页面加载完成之后调用

- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation{

    [SVProgressHUDdismiss];

NSString* jsStr = [NSStringstringWithFormat:@"payResult('%@')",@"true"];

[self.webView evaluateJavaScript:jsStrcompletionHandler:^(id_Nullable result,NSError* _Nullable error) {

NSLog(@"==%@----%@",result, error);

    }];

}

webview 与js怎样实现数据交互

对于android初学者应该都了解webView这个组件。之前我也是对其进行了一些简单的了解,但是在一个项目中不得不用webview的时候,发现了webview的强大之处,今天就分享一下使用webview的一些经验。

1、首先了解一下webview。

webview介绍的原文如下:A View that displays web pages. This class is the basis upon which you can roll your own web browser or simply display some online content within your Activity. It uses the WebKit rendering engine to display web pages and includes methods to navigate forward and backward through a history, zoom in and out, perform text searches and more.

从上面你应该了解到了基本功能,也就是显示网页。之所以我说webview功能强大是因为它和js的交互非常方便,很简单就可以实现。

2、webview能做什么?

①webView可以利用html做界面布局,虽然目前还比较少人这么使用,不过我相信当一些客户端需要复杂的图文(图文都是动态生成)混排的时候它肯定是个不错的选择。

②直接显示网页,这功能当然也是它最基本的功能。

③和js交互。(如果你的js基础比java基础好的话那么采用这种方式做一些复杂的处理是个不错的选择)。

3、如何使用webview?

这里直接用一个svn上取下的demo,先上demo后讲解。demo的结构图如下:

WebViewDemo.java

package com.google.android.webviewdemo;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.util.Log;

import android.webkit.JsResult;

import android.webkit.WebChromeClient;

import android.webkit.WebSettings;

import android.webkit.WebView;

/**

* Demonstrates how to embed a WebView in your activity. Also demonstrates how

* to have javascript in the WebView call into the activity, and how the activity

* can invoke javascript.

* p

* In this example, clicking on the android in the WebView will result in a call into

* the activities code in {@link DemoJavaScriptInterface#clickOnAndroid()}. This code

* will turn around and invoke javascript using the {@link WebView#loadUrl(String)}

* method.

* p

* Obviously all of this could have been accomplished without calling into the activity

* and then back into javascript, but this code is intended to show how to set up the

* code paths for this sort of communication.

*

*/

public class WebViewDemo extends Activity {

private static final String LOG_TAG = "WebViewDemo";

private WebView mWebView;

private Handler mHandler = new Handler();

@Override

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.main);

mWebView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setSavePassword(false);

webSettings.setSaveFormData(false);

webSettings.setJavaScriptEnabled(true);

webSettings.setSupportZoom(false);

mWebView.setWebChromeClient(new MyWebChromeClient());

mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

mWebView.loadUrl("");

}

final class DemoJavaScriptInterface {

DemoJavaScriptInterface() {

}

/**

* This is not called on the UI thread. Post a runnable to invoke

* loadUrl on the UI thread.

*/

public void clickOnAndroid() {

mHandler.post(new Runnable() {

public void run() {

mWebView.loadUrl("javascript:wave()");

}

});

}

}

/**

* Provides a hook for calling "alert" from javascript. Useful for

* debugging your javascript.

*/

final class MyWebChromeClient extends WebChromeClient {

@Override

public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

Log.d(LOG_TAG, message);

result.confirm();

return true;

}

}

}

demo.html

html

script language="javascript"

/* This function is invoked by the activity */

function wave() {

alert("1");

document.getElementById("droid").src="android_waving.png";

alert("2");

}

/script

body

!-- Calls into the javascript interface for the activity --

a onClick="window.demo.clickOnAndroid()"div style="width:80px;

margin:0px auto;

padding:10px;

text-align:center;

border:2px solid #202020;"

img id="droid" src="android_normal.png"/br

Click me!

/div/a

/body

/html

main.xml

LinearLayout xmlns:android=""

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/intro"

android:padding="4dip"

android:textSize="16sp"

/

WebView

android:id="@+id/webview"

android:layout_width="fill_parent"

android:layout_height="0dip"

android:layout_weight="1"

/

/LinearLayout

4、如何交互?

①android如何调用js。

调用 形式:

mWebView.loadUrl("javascript:wave()");

其中wave()是js中的一个方法,当然你可以把这个方法改成其他的方法,也就是android调用其他的方法。

②js如何调用android。

调用形式:

a onClick="window.demo.clickOnAndroid()"

代码中的“demo”是在android中指定的调用名称,即

mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");

代码中的clickOnAndroid()是“demo”对应的对象:new DemoJavaScriptInterface() 中的一个方法。

③双向交互。

当然是把前面的两种方式组合一下就可以了。

5、讲解demo。

现在你一定了解了android和js的交互了。是时候分析一些demo了,根据上面讲的你也应该比较清楚了。具体交互流程如下:

①点击图片,则在js端直接调用android上的方法clickOnAndroid();

②clickOnAndroid()方法(利用线程)调用js的方法。

③被②调用的js直接控制html。

个人总结:利用webView的这种方式在有些时候UI布局就可以转成相应的html代码编写了,而html布局样式之类有DW这样强大的工具,而且网上很多源码,很多代码片。在UI和视觉效果上就会节省很多时间,重复发明轮子没有任何意义。

android中webview与js交互

移动开发中,我们经常会遇到混合开发模式,经常是在移动客户端中增加网页,来减少客户端的压力,同时也让软件更加灵活。废话少说,下面直接进入主题。

webView.getSettings().setAppCachePath(getCacheDir().getAbsolutePath());

webView.getSettings().setAppCacheEnabled(true);

if (Constant.DEBUG) {

webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

}

if (Build.VERSION.SDK_INT = Build.VERSION_CODES.LOLLIPOP) {

webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);

}

//参数1 定义Android 与js交互的接口, 参数2 与js交互的一个常量,可以是任意一个常量字符串,

但是h5网页调用的时候需要增加这个参数二:handler

public class JSInterface{

@JavascriptInterface//这个标注必须加上 表示js要调用的方法,可以自动识别

public void getShareInfo(String strings) {

//todo android dosomething

}

}

那么 js端该如何调用这个方法呢\

android 和ios的调用方法不一样 因此 h5里面需要区别andorid和ios机型来分别调用移动端方法

如android:

//handler 是与android 约定的常量(最好做成全局通用的常量)

//getShareInfo 是与android 定义的调用方法

以上常量、方法、参数类型 必须一致才能成功调用

WebView提供两个事件回调类给应用层,分别为WebViewClient,WebChromeClient开发者可以继承

这两个类,接手相应事件处理。WebViewClient 主要提供网页加载各个阶段的通知,比如网页开始

加载onPageStarted,网页结束加载onPageFinished等;WebChromeClient主要提供网页加载过程

中提供的数据内容,比如返回网页的title,favicon等。

有需要监听加载网页进度

//需要webBar的可以自定义增加一个webBar

最后,就是大家都知道的webView.loadUrl(url);//url需要加载的网页

那么,如何在android调用js的方法呢

//getMsg() 为js里面暴露的方法

在销毁的时候:

protected void onDestroy() {\

super.onDestroy();\

if (webView != null) {\

webView.loadUrl("about:blank");\

webView.destory();\

}\

}

UIWebView怎么拦截到网页里面JS发起的Ajax请求

目前iOS与JS通信貌似只有两种方法:用webView的stringByEvaluatingJavaScriptFromString:方法主动获取,或者是shouldStartLoadWithRequest:回调被动接受,似乎没有其他的方式了 。由于Ajax没有刷新当前页面,所以shouldStartLoadWithRequest回调不会被执行,这种情况只能通过修改web的代码来解决,思

路是改变页面的window.location,把自己需要的参数放在url里,在Ajax执行的时候去修改window.location

如何处理webview与js之间交互

先说说android中webview控件如何调用javascript代码?

其实android中webview控件调用javascript方法还是比较简单,只需要设置webview支持javascript,然后用loadUrl调用javascript方法即可。

javascript调用android中自定义好的方法(例如: 分享)

需要给webview控件添加addJavascriptInterface方法,而这个就类似于初始化一个类对象,以及类对象里的方法。这个类对象就提供给javascript来调用。

javascript调用自定义好的JShare对象。

效果图

webviewjs发请求(webview的网络请求)

本文目录一览: 1、WKWebView js方法的使用 2、webview 与js怎样实现数据交互 3、android中webview与js交互 4、UIWebView怎么拦截到网页里面JS发起的Aj

2023-12-08
java网络请求和几种网络框架(常用的网络请求框架有)

2022-11-16
iospost请求json,ios网络请求

本文目录一览: 1、iOS 怎么用post方式上传json数据 2、iosafn怎么用post上传json数据 3、ios以post请求传来的json 在java怎么获取?? 4、2020-07-30

2023-12-08
Android网络请求全面解析

2023-05-18
get请求丶java教程网,java调用get请求

2022-11-20
webviewjs事件,webview 执行js

2022-11-25
发篇java复习笔记(java课程笔记)

2022-11-09
用Retrofit2进行Android网络请求

一、前言 对于Android开发者来说,网络请求几乎是每个应用程序必备的一部分。而Retrofit2则是一个非常流行的网络请求库,主要用于在Android上进行RESTful API请求。Retrof

2023-12-08
java发送请求,Java发送请求

2023-01-05
Uniapp网络请求指南

2023-05-19
js发送网页请求,javascript怎么向网页发送请求

2022-11-22
Python实现Android网络请求框架

2023-05-14
java请求,java请求转发

2022-11-29
使用OkHttpJson实现Android网络请求

2023-05-17
java请求url,java请求https

2023-01-08
js发起websocket,js发起远程网络请求,并且获取返

本文目录一览: 1、前台不用Socket.io.js如何发起webSocket请求连接? 2、Js WebSocket 3、WebSocket的简单实现 4、在html页面中,用js调取websock

2023-12-08
使用HttpClient和JSON在Java中进行网络请求的

2023-05-18
使用Python的requests库发送网络请求

2023-05-13
js代码原生请求,js原生get请求

2022-11-24
FiddlerAndroid:轻松调试移动应用网络请求

2023-05-14