当前位置:首页 » 安卓系统 » webviewandroidjs交互

webviewandroidjs交互

发布时间: 2023-04-12 16:02:05

A. Android与Webview交互

补充
- WebViewClient
- WebViewClient主要帮助WebView处理各种通知、请求事件的,比如:
- shouldOverrideUrlLoading
- onLoadResource
- onPageStart
- onPageFinish
- onReceiveError
- onReceivedHttpAuthRequest
- WebChromeClient
-WebChromeClient主要辅助WebView处理javascript的对话框、网站图标、网站title、加载进度等比如
- onCloseWindow(关闭WebView)
- onCreateWindow()
- onJsAlert (WebView上alert无效,需要定制WebChromeClient处理弹出)
- onJsPrompt
- onJsConfirm
- onProgressChanged
- onReceivedIcon
- onReceivedTitle

JsBridgeGithub传送门

转自Android与JsBridge使用原理

JsBridge重要的三点:

BridgeWebview

WebViewJavascriptBridge.js

B. Android使用WebView和JS交互的问题

1、写在网页加载完成后不行么
@Override
public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); webview.loadUrl("javascript:" +JSmethod);
}
2、不行将js发过来我试试,没遇到过这种问题,所以不是很清楚

C. 安卓开发webview与js交互

@JavascriptInterface public String getValue(final String str) { if(str.equals("test")){ //java中不能用==号 return "a"; } return "b";}

D. Android webView 注入js文件,及交互

0.js文件:

链接:https://pan..com/s/1MaWKxgkYgQTVQCgn8-dxLg

提取码:o6wy

3.添加js要调用的Android方法

4.添加(JsBridge:js中调用Android方法的对象名)

5.注入js

6.Android调用js方法传值给js

步骤3中发送了处理后的消息,在webactivity中接受消息并处理:

数据示例:(参数需要使用单引号包着)

else中对应的

callbackResult('sr1557665118336','{"data":"test"}')

if中对应的

javascript:callbackResult('sr1557665118336','{"data":"test"}')

7.补充:eventbus消息实体封装类

8.总结:

E. 安卓Webview 与 vue h5 使用js交互

总的来说都是使用安卓webview.loadUrl(url)加载页面

url为在线网页连接

将打包好的网页资源放入安卓静态目录

加载目录为

Android 调用 JS 有两种方式,都是通过 WebView 的方法:
webview.loadUrl()
webview.evaluateJavascript()

js方法

vue需要把方法挂载到windows

通过映射js object暴露给js操作
安卓

h5调用

经常需要适配安卓和ios
加入以下机型判断

Android与H5交互——JSBridge - (jianshu.com)

F. androidwebview加载本地js怎么实现交互

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />

第二种方法的步骤:
1、在布局文件中声明WebView
2、在Activity中实例化WebView
3、调用WebView的loadUrl( )方法,设置WevView要显示的网页
4、为了让WebView能够响应超链接功能,调用setWebViewClient( )方法,设置 WebView视图
5、用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
6、需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET"/>

G. android webview js 交互 怎么调用js 的new

android webview js 交互 调用
第一步:
mainfest.xml中加入网络权限

[java] view plain
<uses-permission android:name="android.permission.INTERNET" />
第二步:

加载本地写好的html文件(定义好js中提供给android调用的方法 funFromjs(),和android提供给js调用的对象接口fun1FromAndroid(String name)),放在 assets目录下。

[html] view plain
<body>
<a>js中调用本地方法</a>
<script>

function funFromjs(){
document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";
}
var aTag = document.getElementsByTagName('a')[0];
aTag.addEventListener('click', function(){
//调用android本地方法
myObj.fun1FromAndroid("调用android本地方法fun1FromAndroid(String name)!!");
return false;
}, false);
</script>
<p></p>
<div id="helloweb">

</div>
</body>

第三步:

实现android工程与js交互的相关代码
android主题代码:

[java] view plain
@SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
initViews();

//设置编码
mWebView.getSettings().setDefaultTextEncodingName("utf-8");
//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
//设置背景颜色 透明
mWebView.setBackgroundColor(Color.argb(0, 0, 0, 0));
//设置本地调用对象及其接口
mWebView.addJavascriptInterface(new JavaScriptObject(mContext), "myObj");
//载入js
mWebView.loadUrl("file:///android_asset/test.html");

//点击调用js中方法
mBtn1.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
mWebView.loadUrl("javascript:funFromjs()");
Toast.makeText(mContext, "调用javascript:funFromjs()", Toast.LENGTH_LONG).show();
}
});

}
js调用的android对象方法定义

[java] view plain
public class JavaScriptObject {
Context mContxt;
@JavascriptInterface //sdk17版本以上加上注解
public JavaScriptObject(Context mContxt) {
this.mContxt = mContxt;
}

public void fun1FromAndroid(String name) {
Toast.makeText(mContxt, name, Toast.LENGTH_LONG).show();
}

public void fun2(String name) {
Toast.makeText(mContxt, "调用fun2:" + name, Toast.LENGTH_SHORT).show();
}
}

H. 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();\

}\

}

I. 安卓中js和webview交互必须传值吗

一、网页的JS代码调用ANDROID中JAVA代码的方法
在网页中调用java代码、需要在webview控件中添加javascriptInterface

contentWebView = (WebView) findViewById(R.id.webview);
//启用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(this, "js对象名");

在Activity中定义一个要被js调用的方法、src为js传递过来的参数、如果没有不传也可以的哈

public void jsFunction(final String str) {
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
runOnUiThread(new Runnable() {
@Override
public void run() {
//在里对Android应用的UI进行处理
}
});
}

在网页中、只需要像调用js方法一样、进行调用就可团野锋以

<a onClick="window.js对象名.jsFunction(´hello world´)" >
点击调用java代码并传递参数
</a>

二、ANDROID中JAVA代码调用网页的JS代码的方法

Java代码调用js并传参其实是通过WebView的loadUrl方法去调用的、只是参数url的写法不一样而已

// 无参数调用
contentWebView.loadUrl("javascript:javacalljs()");
// 传递参数调用
contentWebView.loadUrl("javascript:javacalljswithargs("
+ "´hello world´" + ")");

三、JAVA和JS交互注意事项
1、Java 调用 js 里面的塌晌函数、效率并不是很高脊碧、估计要200ms左右吧、做交互性很强的事情、这种速度很难让人接受、而js去调Java的方法、速度很快、50ms左右、所以尽量用js调用Java方法
2、Java 调用 js 的函数、没有返回值、调用了就控制不到了
3、Js 调用 Java 的方法、返回值如果是字符串、你会发现这个字符串是 native 的、转成 locale 的才能正常使用、使用 toLocaleString() 函数就可以了、不过这个函数的速度并不快、转化的字符串如果很多、将会很耗费时间
4、网页中尽量不要使用jQuery、执行起来需要5-6秒、最好使用原生的js写业务脚本、以提升加载速度、改善用户体验

J. 安卓和javascript交互必须通过webView吗可以用安卓的其他控件调用js吗还有他们能通过volley交互吗

您好,很高兴能帮助您, Android中webview和js之间的交互 1.android中利用webview调用网页上的js代码。 Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true,,然后通过loadUrl就可以直接进行调用,如下所示: mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("javascript:test()"); 2. 网页上调用android中java代码的方法 在网页中调用java代码,需要在webview控件中添加javascriptInterface。如下所示: mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid() { mHandler.post(new Runnable() { public void run() { Toast.makeText(Test.this, "测试调用java", Toast.LENGTH_LONG).show(); } }); } }, "demo"); 在网页中,只需要像调用js方法一样,进行调用就可以 <div id='b'><a onclick="window.demo.clickOnAndroid()">b.c</a></div> 3. Java代码调用js并传参 首先需要带参数的js函数,如function test(str),然后只需在调用js时传入参数即可,如下所示: mWebView.loadUrl("javascript:test('aa')"); 4.Js中调用java函数并传参 首先一样需要带参数的函数形式,但需注意此处的参数需要final类型,即得到以后不可修改,如果需要修改其中的值,可以先设置中间变量,然后进行修改。如下所示: mWebView.addJavascriptInterface(new Object() { public void clickOnAndroid(final int i) { mHandler.post(new Runnable() { public void run() { int j = i; j++; Toast.makeText(Test.this, "测试调用java" + String.valueOf(j), Toast.LENGTH_LONG).show(); } }); } }, "demo"); 然后在html页面中,利用如下代码<div id='b'><a onclick="window.demo.clickOnAndroid(2)">b.c</a></div>, 即可实现调用 你的采纳是我前进的动力,还有不懂的地方,请你继续“追问”! 如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助!

热点内容
解压密码对 发布:2025-07-05 09:33:00 浏览:582
广东金税盘的服务器地址是什么 发布:2025-07-05 09:10:29 浏览:703
挂式手机卡的服务密码是多少 发布:2025-07-05 08:57:40 浏览:943
电信卡密码八位数是多少 发布:2025-07-05 08:49:37 浏览:440
配置高用的久选什么电脑 发布:2025-07-05 08:22:40 浏览:741
迷你世界如何卡进设密码的房间 发布:2025-07-05 08:15:16 浏览:882
小米9se买哪个配置 发布:2025-07-05 07:57:32 浏览:364
金山快盘拒绝访问 发布:2025-07-05 07:42:29 浏览:251
新款奔驰c级买哪个配置好 发布:2025-07-05 07:41:46 浏览:290
android长宽比 发布:2025-07-05 07:34:11 浏览:687