當前位置:首頁 » 安卓系統 » JS與Android互調

JS與Android互調

發布時間: 2023-03-14 14:55:01

javascript調用android問題

onclick="window.Android.show()"
你的語法寫錯了,js調用Android要用window.TAG
這個TAG就是
webView.addJavascriptInterface(new Object(), TAG); // 設置javaScript可用於操作Activity類
看你的代碼,你傳遞了一個Android
因此你的js里應改成window.Android.show();

⑵ Android調用js的問題

android怎樣調用js文件裡面的方法
如果多個線程同時訪問一個集合,而其中至少一個線程修改了該集合,那麼它必須 保持外部同步。這通常是通過對自然封裝該集合的對象執行同步操作來完成的。如果不存在這樣的對象,則應該使用 Collections.synchronizedSet 方法來「包裝」集合。最好在創建時完成這一操作,以防止對 HashSet 實例進行意外的不同步訪問:
Set s = Collections.synchronizedSet(new HashSet(...));

⑶ 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.總結:

⑷ 在Android上怎樣實現JAVA和JS交互

java和js交互分為三種情況,分別是:

1 調用網頁上的js代碼

Android中可以通過webview來實現和js的交互,在程序中調用js代碼,只需要將webview控制項的支持js的屬性設置為true,,然後通過loadUrl就可以直接進行調用,如下所示:

mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("javascript:test()");

2 網頁java代碼的方法

在網頁中調用java代碼,需要在webview控制項中添加javascriptInterface。如下所示:

mWebView.addJavascriptInterface(newObject(){
publicvoidclickOnAndroid(){
mHandler.post(newRunnable(){
publicvoidrun(){
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函數,如functiontest(str),然後只需在調用js時傳入參數即可,如下所示:

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

4.Js中調用java函數並傳參

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

mWebView.addJavascriptInterface(newObject(){
publicvoidclickOnAndroid(finalinti){
mHandler.post(newRunnable(){
publicvoidrun(){
intj=i;
j++;
Toast.makeText(Test.this,"測試調用java"+String.valueOf(j),Toast.LENGTH_LONG).show();
}
});
}
},"demo");

然後在html頁面中,利用如下代碼<divid='b'><aonclick="window.demo.clickOnAndroid(2)">b.c</a></div>,

下面是安卓無憂中js 與安卓相互調用的效果圖,可以網路一下安卓無憂,點擊源碼,看看裡面的源碼。

⑸ JS怎樣調用Android本地原生方法

在android中調用本地js文件里的方法並得到返回值其方法如下:

Android中內置了WebKit模塊,而該模塊的Java層視圖類就是WebView,所有需要使用Web瀏覽器功能的Android都需要創建該視圖類對象顯示和處理請求的網路資源。目前WebKit支持Http、Https、Ftp和JavaScript請求。下面是在Android中調用JavaScript方法以及如何在js中調用本地方法。

1、在Assets下放一個簡單的html文件jstest.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html40/strict.dtd">
<HTML>
<HEAD>
<meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" />
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script>
function showMsg(){
alert("hello world!");
}
function showMsgInAndroid(){
myjs.showMsg('hello in android!');
}
</script>
</HEAD>
<BODY>
<span>測試js使用</span>

<button id='btntest' onclick='showMsgInAndroid()'>調用android方法</button>
</BODY>
</HTML>
2、布局文件main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<WebView
android:id="@+id/wv_test"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/btn_showmsg"/>
<Button
android:id="@+id/btn_showmsg"
android:layout_width="200dip"
android:layout_height="40dip"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="調用html中js方法"/>
</RelativeLayout>

3、然後是Activity,MainActivity.java
package com.harold.jstest;

import com.harold.base.JSKit;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;

public class MainActivity extends Activity {

private WebView mWebView;
private Button btnShowInfo;
private JSKit js;
private Handler mHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化控制項
mWebView = (WebView) findViewById(R.id.wv_test);
btnShowInfo = (Button) findViewById(R.id.btn_showmsg);
//實例化js對象
js = new JSKit(this);
//設置參數
mWebView.getSettings().setBuiltInZoomControls(true);
//內容的渲染需要webviewChromClient去實現,設置webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js綁定到全局的myjs上,myjs的作用域是全局的,初始化後可隨處使用
mWebView.addJavascriptInterface(js, "myjs");

mWebView.loadUrl("file:///android_asset/jstest.html");

btnShowInfo.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
mHandler.post(new Runnable() {
@Override
public void run() {
//調用 HTML 中的javaScript 函數
mWebView.loadUrl("javascript:showMsg()");
}
});
}
});
}

}

4、最後是綁定全局js的類JSKit.java
package com.harold.base;

import android.widget.Toast;

import com.harold.jstest.MainActivity;

public class JSKit {
private MainActivity ma;

public JSKit(MainActivity context) {
this.ma = context;
}

public void showMsg(String msg) {
Toast.makeText(ma, msg, Toast.LENGTH_SHORT).show();
}
}

例子比較簡單,代碼里都加了注釋,這里就不多說了,本示例用的本地的html,如果訪問網路中的網頁,別忘記在AndroidManifest.xml中加許可權
<uses-permission android:name="android.permission.INTERNET"/>

⑹ JS 調用android的方法該怎麼調

<body>

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

<!-- 從HTML文件中調用activity中的函數 -->

<!-- 也就是從HTML到android程序 留意window.demo.clickOnAndroid()這句話 -->

<a onClick="window.demo.clickOnAndroid()">Click</a>

</body>





mWebView.addJavascriptInterface(newDemoJavaScriptInterface(),"demo");

{
DemoJavaScriptInterface(){
}

/**
*ThisisnotcalledontheUIthread.Postarunnabletoinvoke
*
*loadUrlontheUIthread.
*
*/
publicvoidclickOnAndroid(){//注意這里的名稱。它為clickOnAndroid(),注意,注意,嚴重注意
mHandler.post(newRunnable(){
publicvoidrun(){

Toast.makeText....
}
});
}
}

⑺ js怎麼跟Android和ios進行交互

<script>
function view(id){
//alert(id);
myjs.passIdToApp(id);
// passIdApp(id);
}
< /script>

*******************************************************我是分割線****************************************************************

NSString *htmlPath=[[NSBundle mainBundle] resourcePath];
htmlPath=[htmlPath :@"Test.html"];
NSURL *localURL=[[NSURL alloc]initFileURLWithPath:htmlPath];
NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:localURL];

[self.mywebview loadRequest:request];
JSContext *context = [self.mywebview valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
context[@"myjs.passIdToApp"] = ^() {
NSLog(@"Begin Log");
NSArray *args = [JSContext currentArguments];
for (JSValue *jsVal in args) {
NSLog(@"%@", jsVal);
NSString *proctID= [NSString stringWithFormat:@"%@",jsVal];
[self.navigationController pushViewController:[[Details_VC alloc]initWithProctID:proctID] animated:YES];
}
// JSValue *this = [JSContext currentThis];
NSLog(@"-------End Log-------");
};

*******************************************************我還是分割線****************************************************************

如果只調用passIdApp(id); 但是如果改成了myjs.passIdApp(id);就無法獲取數據了

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

}\

}

熱點內容
一個密碼多少人知道後就不是秘密 發布:2025-05-12 04:26:07 瀏覽:520
ftp埠非21 發布:2025-05-12 04:09:09 瀏覽:228
雲伺服器屏蔽ip 發布:2025-05-12 04:08:47 瀏覽:911
為什麼安卓介面充電線松 發布:2025-05-12 03:41:20 瀏覽:669
安卓手機打擊墊怎麼玩 發布:2025-05-12 03:23:14 瀏覽:241
phpexplode 發布:2025-05-12 03:15:33 瀏覽:73
雙色球怎麼演算法 發布:2025-05-12 03:15:31 瀏覽:559
伺服器如何整體遷移 發布:2025-05-12 03:15:27 瀏覽:166
顯示linux分區 發布:2025-05-12 03:15:25 瀏覽:572
c語言數組長度函數是 發布:2025-05-12 03:11:09 瀏覽:173