android與js交互-ag真人国际官网
ⅰ js怎麼跟android和ios進行交互
細心的你一定注意到這里的name和android里設置的"name"一模一樣了吧,沒錯,在安卓中設置的標簽,在js中就變成了一個實體,這個名字可以根據里的需要來改。
然後你對一個按鈕標簽設置點擊事件,事件觸發方法demo();這樣一次完整的js和java交互就完成了,你,學會了嗎
ⅲ android js 交互 能傳json對象嗎
最近幾個項目的測試結果,android無法主動通過調用
webview.load"); 這種方式將jsonobject類型的data傳給js,因為js那邊得到就是一個string的對象。
與此同時,js主動調用android的對象方式,android也無法返回給js一個jsonobject,需要js做一下轉換,例如:
android 代碼:
[java] view plainprint?
webview mwebview = (webview) this.findviewbyid(r.id.webview);
websettings settings = mwebview.getsettings();
settings.setjavascriptenabled(true);
settings.setpluginsenabled(true);
settings.setallowfileaccess(true);
settings.setcachemode(websettings.load_no_cache);
mwebview.setscrollbarstyle(view.scrollbars_inside_overlay);//不加上,會顯示白邊
string url="file:///android_asset/t.html"; //js代碼卸載t.html里
navigationinstance navigation =new navigationinstance(this);
mwebview.addjavascriptinterface(navigation, "navigation");
navigationinstance里的代碼:
[java] view plainprint?
@override
public jsonobject getmaneuverinfo() {
try{
jsonobject test=new jsonobject();
test.put("maomao", "value");
return test;
//return new jsonobject(bean.maneuverinfo);
}catch(exception e){
log.e(tag, "",e);
}
return null;
}
t.html里的代碼:
[javascript] view plainprint?
function testapi(el){
console.log("---------testapi---------");
eval("var obj = " navigation.getmaneuverinfo());
alert('typeof:' typeof(obj));
alert('maomao:' obj.maomao);
alert('obj:' obj);
}
如果直接寫成 navigation.getmaneuverinfo.maomao是會提示undefined,因為js那邊只得到了一個string對象而已,它不知道maomao是個key。
通過eval將其轉化成表達式就可以調用obj.maomao得到value。
在此ps一下ios,貌似人家支持webview很好,js可以直接獲取到json對象.
ⅳ 安卓和javascript交互必須通過webview嗎可以用安卓的其他控制項調用js嗎還有他們能通過volley交互嗎
您好,很高興能幫助您, android中webview和js之間的交互 1.android中利用webview調用網頁上的js代碼。 android 中可以通過webview來實現和js的交互,在程序中調用js代碼,只需要將webview控制項的支持js的屬性設置為true,,然後通過loadurl就可以直接進行調用,如下所示: mwebview.getsettings().setjavascriptenabled(true); mwebview.load"); 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方法一樣,進行調用就可以
3. java代碼調用js並傳參 首先需要帶參數的js函數,如function test(str),然後只需在調用js時傳入參數即可,如下所示: mwebview.load"); 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頁面中,利用如下代碼, 即可實現調用 你的採納是我前進的動力,還有不懂的地方,請你繼續「追問」! 如你還有別的問題,可另外向我求助;答題不易,互相理解,互相幫助!ⅳ android 與js 交互的目的
實現數據傳輸,完成交互操作。
js代表的是網頁,這個網頁可以展示到android、ios或者pc的瀏覽器上,內嵌到程序里就是webview,是相對獨立的模塊,可以自成一套,但是有些數據或者操作在網頁完成比較麻煩,特別是手機上,比如登錄,需要單獨輸入賬號密碼,很是麻煩,現在都是由qq微信授權登錄,一鍵完成,即使登錄了,登錄信息也不易持久保存(比如下次打開登錄信息就失效了),安全性也不高。
與android或者ios的交互主要是完成數據的交互,比如一個網頁查詢用戶數據需要登錄信息,app已經登錄了,就可以直接中android或者ios的app直接拿,不需要在網頁再次登錄;比如用戶沒有登錄點擊了網頁登錄按鈕,js拉起app的原生登錄,這樣統一登錄路徑,登錄完成把數據回傳給js,完成登錄流程。比如評論,操作界面比較復雜,可能涉及圖片、表情、視頻的上傳下載,用網頁來做的話交互麻煩、性能也不理想,js上點擊評論拉起android或者ios的原生評論模塊,評論完畢通知js刷新數據,是比較理想的交互模式。
ⅵ js怎麼跟android和ios進行交互呢
android和ios都是用navtive語言編寫的app,那麼調用js的方法如下:
native 調用 js:
本質就一個方法,通過 ,都是同步。
1.通常方法:js修通過改doucument的loaction或者新建一個看不見的iframe,修改它的 src,就會觸發回調 webview 的 shouldstartloadwithrequest,參數 request 的 url 就是新賦值的 location 或者 url,上層截獲這個 url 的參數,對此分發即可。 這個都是非同步調用的。
如 js function:
var messagingiframe;
messagingiframe = document.createelement('iframe');
messagingiframe.style.display = 'none';
document.documentelement.appendchild(messagingiframe);
function testiosjs(){
messagingiframe.src = "ios/test/click";
};
當觸發上面的js時,webview會收到下面的回調:
- (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;
}
通過截獲這個request的參數就可以做native需要做的事情。
ⅶ android與js交互實現什麼功能
第一步:
mainfest.xml中加入網路許可權
[java] view plain
第二步:
載入本地寫好的html文件(定義好js中提供給android調用的方法 funfromjs(),和android提供給js調用的對象介面fun1fromandroid(string name)),放在 assets目錄下。
[html] view plain
第三步:
實現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.load;
//點擊調用js中方法
mbtn1.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
mwebview.load");
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實現java與javascript的交互需要什麼許可權
在android的開發過程中,有很多時候需要用到本地java代碼和javascript進行交互。android對交互進行了很好的封裝,在開發中我們可以很簡單的用java代碼調用webview中的js,也可以用webview中的js來調用本地的java代碼,這樣我們可以實現很多原來做不了的功能,比如點擊網頁上的電話號碼後,手機自動撥打電話,點擊網頁中的笑話,自動發送簡訊等.
ⅸ android與js交互的框架有哪些
第一步:
mainfest.xml中加入網路許可權
[java] view plain
第二步:
載入本地寫好的html文件(定義好js中提供給android調用的方法 funfromjs(),和android提供給js調用的對象介面fun1fromandroid(string name)),放在 assets目錄下。
[html] view plain
第三步:
實現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.load;
//點擊調用js中方法
mbtn1.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
mwebview.load");
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();
}
}
ⅹ 安卓開發webview與js交互
@javascriptinterface public string getvalue(final string str) { if(str.equals("test")){ //java中不能用==號 return "a"; } return "b";}