導航:首頁 > 操作系統 > androidjs

androidjs

發布時間:2022-02-12 09:18:24

android里如何調用Js里的函數

Android中內置了WebKit模塊,而該模塊的java層視圖類就是WebView,所有需要使用Web瀏覽器功能的Android都需要創建該視圖類對象顯示和處理請求的網路資源。目前WebKit支持Http、Https、Ftp和JavaScript請求。


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

<HTML>
<HEAD>
<metaname="viewport"content="width=device-width,target-densitydpi=device-dpi"/>
<METAhttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<script>
functionshowMsg(){
alert("helloworld!");
}
functionshowMsgInAndroid(){
myjs.showMsg('helloinandroid!');
}
</script>
</HEAD>
<BODY>
<span>測試js使用</span>
<buttonid='btntest'onclick='showMsgInAndroid()'>調用android方法</button>
</BODY>
</HTML>


2、布局文件main.xml

<?xmlversion="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


packagecom.harold.jstest;
importcom.harold.base.JSKit;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.webkit.WebChromeClient;
importandroid.webkit.WebView;
importandroid.widget.Button;
{
privateWebViewmWebView;
privateButtonbtnShowInfo;
privateJSKitjs;
privateHandlermHandler=newHandler();
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//初始化控制項
mWebView=(WebView)findViewById(R.id.wv_test);
btnShowInfo=(Button)findViewById(R.id.btn_showmsg);
//實例化js對象
js=newJSKit(this);
//設置參數
mWebView.getSettings().setBuiltInZoomControls(true);
//內容的渲染需要webviewChromClient去實現,
//設置webviewChromClient基類,解決js中alert不彈出的問題和其他內容渲染問題
mWebView.setWebChromeClient(newWebChromeClient());
mWebView.getSettings().setJavaScriptEnabled(true);
//把js綁定到全局的myjs上,myjs的作用域是全局的,初始化後可隨處使用
mWebView.addJavascriptInterface(js,"myjs");
mWebView.loadUrl("file:///android_asset/jstest.html");
btnShowInfo.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
mHandler.post(newRunnable(){
@Override
publicvoidrun(){
//調用HTML中的javaScript函數
mWebView.loadUrl("javascript:showMsg()");
}
});
}
});
}
}

② 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"/>

③ android js文件放哪裡

assets文件夾下,具體位置以android studio工具為例,就是在src/main/assets

assets文件夾和java代碼文件夾是同一級別的

④ Android可以監聽JS中的函數嗎

綁定函數bind()最簡單的用法是創建一個函數,使這個函數不論怎麼調用都有同樣的this值。不同於call和apply只是單純地設置this的值後傳參,它還會將所有傳入bind()方法中的實參(第一個參數之後的參數)與this一起綁定。 關於這個特性看《JS權威指南》原文的例子: var sum = function(x,y) { return x + y }; var succ = sum.bind(null, 1); //讓this指向null,其後的實參也會作為實參傳入被綁定的函數sum succ(2); // => 3: 可以看到1綁定到了sum函數中的x 其次, bind()方法所返回的函數的length(形參數量)等於原函數的形參數量減去傳入bind()方法中的實參數量(第一個參數以後的所有參數),因為傳入bind中的實參都會綁定到原函數的形參,舉個例子: function func(a,b,c,d){...} //func的length為4 var after = func.bind(null,1,2); //這里輸入了兩個實參(1,2)綁定到了func函數的a,b console.log(after.length); //after的length為2 第三,當bind()所返回的函數用作構造函數的時候, 傳入bind()的this將被忽略,實參會全部傳入原函數,這樣說很抽象,舉個例子: function original(x){ this.a = 1; this.b = function(){return this.a + x} } var obj={ a = 10 } var newObj = new(original.bind(obj, 2)); //傳入了一個實參2 console.log(newObj.a); //輸出1, 說明返回的函數用作構造函數時obj(this的值)被忽略了 console.log(newObj.b()); //輸出3 ,說明傳入的實參2傳入了原函數original 以上就是ES5中bind方法的特性, 這種技術也被稱為函數柯里化。這種技術將多個參數的函數變成只帶一個參數的函數。bind方法就是該技術在js中的實踐。 關於這篇淺談JS中的bind方法與函數柯里化就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

⑤ android和h5交互,js怎麼在android端列印日誌

Android和H5之間的交互hybridApp開發也不是什麼新鮮事了,其中native和h5之間的交互則是必不可少的。Android中是如何和H5交互的?1、webView載入頁面我們都知道在Android中是通過webView來載入html頁面的,根據HTML文件所在的位置不同寫法也不同://例如:載入assets文件夾下的test.html頁面mWebView.loadUrl("file:///android_asset/test.html")//例如:載入網頁mWebView.loadUrl("")如果只是這樣調用mWebView.loadUrl()載入的話,那麼當你點擊頁面中的鏈接時,頁面將會在你手機默認的瀏覽器上打開。那如果想要頁面在App內中打開的話,那麼就得設置setWebViewClient:mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){mWebView.loadUrl(url);returntrue;}}});2、Android本地通過Java調用HTML頁面中的JavaScript方法想要調用js方法那麼就必須讓webView支持WebSettingswebSettings=mWebView.getSettings();//設置為可調用js方法webSettings.setJavaScriptEnabled(true);若調用的js方法沒有返回值,則直接可以調用mWebView.loadUrl("JavaScript:do()");其中do是js中的方法;若有返回值時我們可以調用mWebView.evaluateJavascript()方法:mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});js代碼如下:2、js調用Android本地Java方法在Android4.2以上可以直接使用@JavascriptInterface註解來聲明,下面是在一個本地Java方法publicclassJsInteration{@(){return"helloworld";}}定義完這個方法後再調用mWebView.addJavascriptInterface()方法:mWebView.addJavascriptInterface(newJsInteration(),"android");那麼在js中怎麼來調用呢?4、攔截HTML頁面中的點擊事件mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){//判斷url攔截事件if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});以上就是Java調用js方法以及js調用Java方法的實現交互方式中的一種。下面給出完整代碼:{publicstaticfinalStringTAG="MainActivity";privateWebViewmWebView;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mWebView=(WebView)findViewById(R.id.webView);mWebView.loadUrl("file:///android_asset/test.html");WebSettingswebSettings=mWebView.getSettings();webSettings.setJavaScriptEnabled(true);mWebView.addJavascriptInterface(newJsInteration(),"android");mWebView.setWebViewClient(newWebViewClient(){@(WebViewview,Stringurl){if(url.equals("file:///android_asset/test2.html")){Log.e(TAG,"shouldOverrideUrlLoading:"+url);startActivity(newIntent(MainActivity.this,Main2Activity.class));returntrue;}else{mWebView.loadUrl(url);returnfalse;}}});}//Android調用有返回值js方法@TargetApi(Build.VERSION_CODES.KITKAT)publicvoidonClick(Viewv){mWebView.evaluateJavascript("sum(1,2)",newValueCallback(){@(Stringvalue){Log.e(TAG,"onReceiveValuevalue="+value);}});}publicclassJsInteration{@(){return"helloworld";}}}test.html調用本地方法點擊

⑥ android 中怎麼執行js腳本

android要執行腳本,只有通過本地的webview打開腳本頁面。

調用步驟

1、設置webview支持腳本

webSettings.setJavaScriptEnabled(true);

2、打開腳本頁面

mWebView.loadUrl("file:///android_asset/demo.html");//這里打開該app的asset目錄下的demo.html,裡面含有wave函數腳本

3、調用腳本

mWebView.loadUrl("javascript:wave()");//調用打開頁面中的wave函數

⑦ android js交互獲取不到Android的方法

因為這里的數據傳遞有問題,public void takePhotos(String []param) java中聲明的是一個string類型的數組,而要js中['hello','world']並不代表是java中的數組。

⑧ Android調用js的問題

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

⑨ android與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();
}
}

⑩ android webview支持任何js嗎

理論上是js都支持, 只要是支持webkit內核的js代碼,webView都是支持的, webview使用的就是webkit內核,相當於一個輕量級的瀏覽器, js是瀏覽器腳本語言!

閱讀全文

與androidjs相關的資料

熱點內容
2020江西買車購置稅演算法 瀏覽:222
百度已解壓文件在哪 瀏覽:88
小米安卓turbo手勢怎麼用 瀏覽:941
php框架作用 瀏覽:35
python消息自定義 瀏覽:949
四川內江電信寬頻伺服器雲主機 瀏覽:953
編譯後的源文件到哪找 瀏覽:956
小米多模網關如何接入aqaraapp 瀏覽:915
python為什麼true 瀏覽:591
androidfonts 瀏覽:341
51單片機外接電源維修 瀏覽:337
文件解壓軟體是幹嘛的 瀏覽:936
linux設置伺服器端ip地址 瀏覽:356
如何把代碼編譯出來 瀏覽:129
python之禪中文版 瀏覽:752
androidbluetooth開發 瀏覽:681
如何買美股什麼app可以買美股 瀏覽:509
分享緩解壓力的做法 瀏覽:383
python圖像處理框架 瀏覽:231
汽車車門加密封條好嗎 瀏覽:498