真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android和js交互,android webview與js交互方式

在android中怎樣調(diào)用本地js文件里的方法并得到返回值

您好,很高興能幫助您,

創(chuàng)新互聯(lián)主營(yíng)鞏義網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā),鞏義h5微信小程序搭建,鞏義網(wǎng)站營(yíng)銷推廣歡迎鞏義等地區(qū)企業(yè)咨詢

Android中webview和js之間的交互

1.android中利用webview調(diào)用網(wǎng)頁(yè)上的js代碼。

Android 中可以通過(guò)webview來(lái)實(shí)現(xiàn)和js的交互,在程序中調(diào)用js代碼,只需要將webview控件的支持js的屬性設(shè)置為true,,然后通過(guò)loadUrl就可以直接進(jìn)行調(diào)用,如下所示:

mWebView.getSettings().setJavaScriptEnabled(true);

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

2. 網(wǎng)頁(yè)上調(diào)用android中java代碼的方法

在網(wǎng)頁(yè)中調(diào)用java代碼,需要在webview控件中添加javascriptInterface。如下所示:

mWebView.addJavascriptInterface(new Object() {

public void clickOnAndroid() {

mHandler.post(new Runnable() {

public void run() {

Toast.makeText(Test.this, "測(cè)試調(diào)用java", Toast.LENGTH_LONG).show();

}

});

}

}, "demo");

在網(wǎng)頁(yè)中,只需要像調(diào)用js方法一樣,進(jìn)行調(diào)用就可以

div id='b'a onclick="window.demo.clickOnAndroid()"b.c/a/div

3. Java代碼調(diào)用js并傳參

首先需要帶參數(shù)的js函數(shù),如function test(str),然后只需在調(diào)用js時(shí)傳入?yún)?shù)即可,如下所示:

mWebView.loadUrl("javascript:test('aa')");

4.Js中調(diào)用java函數(shù)并傳參

首先一樣需要帶參數(shù)的函數(shù)形式,但需注意此處的參數(shù)需要final類型,即得到以后不可修改,如果需要修改其中的值,可以先設(shè)置中間變量,然后進(jìn)行修改。如下所示:

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, "測(cè)試調(diào)用java" + String.valueOf(j), Toast.LENGTH_LONG).show();

}

});

}

}, "demo");

然后在html頁(yè)面中,利用如下代碼div id='b'a onclick="window.demo.clickOnAndroid(2)"b.c/a/div,

即可實(shí)現(xiàn)調(diào)用

你的采納是我前進(jìn)的動(dòng)力,還有不懂的地方,請(qǐng)你繼續(xù)“追問(wèn)”!

如你還有別的問(wèn)題,可另外向我求助;答題不易,互相理解,互相幫助!

在Android上怎樣實(shí)現(xiàn)JAVA和JS交互

在Android的開(kāi)發(fā)過(guò)程中、遇到一個(gè)新需求、那就是讓Java代碼和Javascript代碼進(jìn)行交互、在IOS中實(shí)現(xiàn)起來(lái)很麻煩、而在Android中相對(duì)來(lái)說(shuō)容易、Android對(duì)這種交互進(jìn)行很好的封裝、其實(shí)可以很簡(jiǎn)單的用Java代碼調(diào)用WebView中的js函數(shù)、也可以用WebView中的js來(lái)調(diào)用Android應(yīng)用中的Java代碼

一、網(wǎng)頁(yè)的JS代碼調(diào)用ANDROID中JAVA代碼的方法

在網(wǎng)頁(yè)中調(diào)用java代碼、需要在webview控件中添加javascriptInterface

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

//啟用javascript

contentWebView.getSettings().setJavaScriptEnabled(true);

contentWebView.addJavascriptInterface(this, "js對(duì)象名");

在Activity中定義一個(gè)要被js調(diào)用的方法、src為js傳遞過(guò)來(lái)的參數(shù)、如果沒(méi)有不傳也可以的。

public void jsFunction(final String str) {

Toast.makeText(this, str, Toast.LENGTH_SHORT).show();

runOnUiThread(new Runnable() {

@Override

public void run() {

//在里對(duì)Android應(yīng)用的UI進(jìn)行處理

}

});

}

在網(wǎng)頁(yè)中、只需要像調(diào)用js方法一樣、進(jìn)行調(diào)用就可以

a onClick="window.js對(duì)象名.jsFunction(′hello world′)"

點(diǎn)擊調(diào)用java代碼并傳遞參數(shù)

/a

二、ANDROID中JAVA代碼調(diào)用網(wǎng)頁(yè)的JS代碼的方法

Java代碼調(diào)用js并傳參其實(shí)是通過(guò)WebView的loadUrl方法去調(diào)用的、只是參數(shù)url的寫(xiě)法不一樣

// 無(wú)參數(shù)調(diào)用

contentWebView.loadUrl("javascript:javacalljs()");

// 傳遞參數(shù)調(diào)用

contentWebView.loadUrl("javascript:javacalljswithargs("

+ "′hello world′" + ")");

三、JAVA和JS交互注意事項(xiàng)

1、Java 調(diào)用 js 里面的函數(shù)、效率并不是很高、估計(jì)要200ms左右吧、做交互性很強(qiáng)的事情、這種速度很難讓人接受、而js去調(diào)Java的方法、速度很快、50ms左右、所以盡量用js調(diào)用Java方法

2、Java 調(diào)用 js 的函數(shù)、沒(méi)有返回值、調(diào)用就控制不到

3、Js 調(diào)用 Java 的方法、返回值如果是字符串、你會(huì)發(fā)現(xiàn)這個(gè)字符串是 native 的、轉(zhuǎn)成 locale 的才能正常使用、使用 toLocaleString() 函數(shù)就可以、不過(guò)這個(gè)函數(shù)的速度并不快、轉(zhuǎn)化的字符串如果很多、將會(huì)很耗費(fèi)時(shí)間

4、網(wǎng)頁(yè)中盡量不要使用jQuery、執(zhí)行起來(lái)需要5-6秒、最好使用原生的js寫(xiě)業(yè)務(wù)腳本、以提升加載速度、改善用戶體驗(yàn)

原生APP中js怎樣與Android和ios進(jìn)行交互

一、對(duì)于Android和ios我們要執(zhí)行不同的操作,下面是判斷系統(tǒng)的js代碼

// alert(ismobile(1)); 1表示Android,0表示ios

function ismobile(test){

var u = navigator.userAgent, app = navigator.appVersion;

if(/AppleWebKit.*Mobile/i.test(navigator.userAgent) || (/MIDP|SymbianOS|NOKIA|SAMSUNG|LG|NEC|TCL|Alcatel|BIRD|DBTEL|Dopod|PHILIPS|HAIER|LENOVO|MOT-|Nokia|SonyEricsson|SIE-|Amoi|ZTE/.test(navigator.userAgent))){

if(window.location.href.indexOf("?mobile")lt;0){

try{

if(/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)){

return '0';

}else{

return '1';

}

}catch(e){}

}

}else if( u.indexOf('iPad') gt; -1){

return '0';

}else{

return '1';

}

}

二、js調(diào)用app端函數(shù),下面是js代碼

if(ismobile(1)==1){

Android.setTypeActivity(id,type,href);

}else{

jsToios(id,type,href);

}

setTypeActivity是Android端定義的函數(shù),jsToios是ios端定義的函數(shù),括號(hào)里是js端傳遞的參數(shù)。

三、至于js端怎樣獲取app端的數(shù)據(jù),只需在js端提供給app端函數(shù)名字,在通知app端調(diào)用即可

四、還有一種方法可以不通過(guò)app的方法將數(shù)據(jù)傳遞給另一個(gè)頁(yè)面,那就是通過(guò)URL的方式

在本頁(yè)面將數(shù)據(jù)拼接在ip后面

在另外一個(gè)頁(yè)面通過(guò)下面方法獲取URL后的參數(shù)

function GetRequest() {

var url = location.search; //獲取url中"?"符后的字串

var theRequest = new Object();

if (url.indexOf("?") != -1) {

var str = url.substr(1);

strs = str.split("");

for(var i = 0; i strs.length; i ++) {

theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);

}

}

return theRequest;

}

// 獲取URL參數(shù)

var Request = new Object();

Request = GetRequest();

var name;

name = Request['name'];

android中webview與js交互

移動(dòng)開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到混合開(kāi)發(fā)模式,經(jīng)常是在移動(dòng)客戶端中增加網(wǎng)頁(yè),來(lái)減少客戶端的壓力,同時(shí)也讓軟件更加靈活。廢話少說(shuō),下面直接進(jìn)入主題。

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);

}

//參數(shù)1 定義Android 與js交互的接口, 參數(shù)2 與js交互的一個(gè)常量,可以是任意一個(gè)常量字符串,

但是h5網(wǎng)頁(yè)調(diào)用的時(shí)候需要增加這個(gè)參數(shù)二:handler

public class JSInterface{

@JavascriptInterface//這個(gè)標(biāo)注必須加上 表示js要調(diào)用的方法,可以自動(dòng)識(shí)別

public void getShareInfo(String strings) {

//todo android dosomething

}

}

那么 js端該如何調(diào)用這個(gè)方法呢\

android 和ios的調(diào)用方法不一樣 因此 h5里面需要區(qū)別andorid和ios機(jī)型來(lái)分別調(diào)用移動(dòng)端方法

如android:

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

//getShareInfo 是與android 定義的調(diào)用方法

以上常量、方法、參數(shù)類型 必須一致才能成功調(diào)用

WebView提供兩個(gè)事件回調(diào)類給應(yīng)用層,分別為WebViewClient,WebChromeClient開(kāi)發(fā)者可以繼承

這兩個(gè)類,接手相應(yīng)事件處理。WebViewClient 主要提供網(wǎng)頁(yè)加載各個(gè)階段的通知,比如網(wǎng)頁(yè)開(kāi)始

加載onPageStarted,網(wǎng)頁(yè)結(jié)束加載onPageFinished等;WebChromeClient主要提供網(wǎng)頁(yè)加載過(guò)程

中提供的數(shù)據(jù)內(nèi)容,比如返回網(wǎng)頁(yè)的title,favicon等。

有需要監(jiān)聽(tīng)加載網(wǎng)頁(yè)進(jìn)度

//需要webBar的可以自定義增加一個(gè)webBar

最后,就是大家都知道的webView.loadUrl(url);//url需要加載的網(wǎng)頁(yè)

那么,如何在android調(diào)用js的方法呢

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

在銷毀的時(shí)候:

protected void onDestroy() {\

super.onDestroy();\

if (webView != null) {\

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

webView.destory();\

}\

}

js怎么跟Android和ios進(jìn)行交互

Android的webview是基于webkit內(nèi)核的,webview中集成了js與java互調(diào)的接口函數(shù),通過(guò)addJavas criptInterface方法,可以將Java的類注冊(cè)進(jìn)webkit,給網(wǎng)頁(yè)上的js進(jìn)行調(diào)用,而且還可以通過(guò)loadUrl方法是給webkit傳遞一個(gè)URL,供瀏覽器來(lái)進(jìn)行解析,實(shí)現(xiàn)Java和js交互。要想運(yùn)行網(wǎng)頁(yè)上的js腳本,webview必須設(shè)置支持Javas cript。Java代碼1mWebview.getSettings().setJavas criptEnabled(true);然后是設(shè)置webview要加載的網(wǎng)頁(yè):web的網(wǎng)頁(yè):webView.loadUrl("");本地的網(wǎng)頁(yè):webView.loadUrl(""); //本地的存放在:assets文件夾中webview做完基本的初始化后我們還要要給它,加進(jìn)一個(gè)回調(diào)的代理類Javas criptInterface,并給它一個(gè)調(diào)用的名稱:ncpJava代碼1mWebView.addJavas criptInterface(new Javas criptInterface(),"ncp");Javas criptInterface可以是一個(gè)普通的Java類,類實(shí)現(xiàn)的方法,均可被js回調(diào):Java代碼final class Javas criptInterface {public int callOnJs() {return 1000;}public void callOnJs2(String mode) {//TODO}}Java要調(diào)用js的方法,只需知道js的方法名稱即可:Java代碼1mWebView.loadUrl("javas cript:onSaveCallback()");js 這邊就更簡(jiǎn)單:Js代碼window.onload = function(){document.getElementById('btn_1').addEventListener('click', onBtnClick, false);var _int_value = window.ncp.callOnJs();alert("get int from java:" + _int_value );}function onBtnClick() {window.ncp.callOnJs2("click");}

js怎么跟Android和ios進(jìn)行交互呢?

Android和ios都是用navtive語(yǔ)言編寫(xiě)的app,那么調(diào)用js的方法如下:

Native 調(diào)用 JS:

本質(zhì)就一個(gè)方法,通過(guò) stringByEvaluatingJavaScriptFromString,都是同步。

1.通常方法:js修通過(guò)改doucument的loaction或者新建一個(gè)看不見(jiàn)的iFrame,修改它的 src,就會(huì)觸發(fā)回調(diào) webView 的 shouldStartLoadWithRequest,參數(shù) request 的 url 就是新賦值的 location 或者 url,上層截獲這個(gè) url 的參數(shù),對(duì)此分發(fā)即可。 這個(gè)都是異步調(diào)用的。

如 JS function:

var messagingIframe;

messagingIframe = document.createElement('iframe');

messagingIframe.style.display = 'none';

document.documentElement.appendChild(messagingIframe);

function TestIOSJS(){

messagingIframe.src = "ios/test/click";

};

當(dāng)觸發(fā)上面的JS時(shí),webview會(huì)收到下面的回調(diào):

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

{

NSString *url = request.URL.absoluteString;

if([url hasSuffix:@"ios/test/click"]){

//do something you want

return NO;

}

return YES;

}

通過(guò)截獲這個(gè)request的參數(shù)就可以做native需要做的事情。


新聞標(biāo)題:android和js交互,android webview與js交互方式
文章轉(zhuǎn)載:http://weahome.cn/article/dsdosjg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部