Android Naive與WebView的互相調(diào)用詳解
Android Naive與WebView的互相調(diào)用詳解
Android的Naive程序是可以嵌套WebView,并且可以做到與WebView的交互,一般來說有兩種方法,一是直接交互,比如,Naive直接調(diào)用WebView的方法和WebView直接調(diào)用Naive的方法。二是WebView可以寫<a/>超鏈接標(biāo)簽,然后用戶點(diǎn)擊此標(biāo)簽時(shí),Naive可以攔截到點(diǎn)擊標(biāo)簽的事件,這樣,我們可以在鏈接上做一套自己的協(xié)議,然后Android和iOS可以根據(jù)此協(xié)議做出相同的處理,做到多平臺統(tǒng)一。
我們先研究一下Naive和WebView如何相互調(diào)用。
初始化:
mWebView = (WebView) findViewById(R.id.main_wv);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("file:///android_asset/demo.html");
//第一個(gè)為交給WebView來進(jìn)行控制的對象,第二個(gè)為控制的對象的變量名,即JS得到此對象后,在為此對象賦名,就可以進(jìn)行控制了。
mWebView.addJavascriptInterface(this, "naive");
1、Naive直接調(diào)用JS方法:
下面為html中的JS方法 :
function alert(){
document.getElementById("title").innerHTML = "Naive調(diào)用Js無參方法";
}
naive進(jìn)行調(diào)用,方式為調(diào)用WebView的loadUrl方法,方法中傳遞一個(gè)String,格式為'javascript:'+'方法名'+'(變量)'
public void onJs(View view) {
mWebView.loadUrl("javascript:alert()");
}
有參數(shù)JS方法:
function alertWith(arg){
document.getElementById("title").innerHTML = arg;
}
naive進(jìn)行有參JS調(diào)用:
public void onJsWith(View view) {
mWebView.loadUrl("javascript:alertWith('Naive調(diào)用Js有參方法')");
}
2、JS調(diào)用naive:
本地先寫好要被調(diào)用的方法,注意前面需要加上注解@JavascriptInterface
@JavascriptInterface
public void toast() {
Toast.makeText(this, "JS調(diào)用了Naive的無參方法", Toast.LENGTH_SHORT).show();
}
JS調(diào)用的代碼:
<input type="button" value="點(diǎn)擊調(diào)用naive代碼" onclick="window.naive.toast()"/>
本地寫好有參的要被調(diào)用的方法:
@JavascriptInterface
public void toastWith(String toast) {
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
}
js調(diào)用有參的代碼:
<input type="button" value="點(diǎn)擊調(diào)用naive代碼并傳遞參數(shù)"
onclick="window.naive.toastWith('JS調(diào)用了Naive的有參代碼')"/>
下面將Activity的源代碼貼出來;
public class MainActivity extends AppCompatActivity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.main_wv);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(this, "naive");
mWebView.loadUrl("file:///android_asset/demo.html");
}
public void onJs(View view) {
mWebView.loadUrl("javascript:alert()");
}
public void onJsWith(View view) {
mWebView.loadUrl("javascript:alertWith('Naive調(diào)用Js有參方法')");
}
@JavascriptInterface
public void toast() {
Toast.makeText(this, "JS調(diào)用了Naive的無參方法", Toast.LENGTH_SHORT).show();
}
@JavascriptInterface
public void toastWith(String toast) {
Toast.makeText(this, toast, Toast.LENGTH_SHORT).show();
}
}
下面為HTML的代碼:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<script type="text/javascript">
function alert(){
document.getElementById("title").innerHTML = "Naive調(diào)用Js無參方法";
}
function alertWith(arg){
document.getElementById("title").innerHTML = arg;
}
</script>
</head>
<body>
<h1 id="title"></h1><br/>
<input type="button" value="點(diǎn)擊調(diào)用naive代碼" onclick="window.naive.toast()"/><br/>
<input type="button" value="點(diǎn)擊調(diào)用naive代碼并傳遞參數(shù)"
onclick="window.naive.toastWith('JS調(diào)用了Naive的有參代碼')"/>
</body>
</html>
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android編程實(shí)現(xiàn)的首頁左右滑動切換功能示例
這篇文章主要介紹了Android編程實(shí)現(xiàn)的首頁左右滑動切換功能,涉及Android事件監(jiān)聽及響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
Android學(xué)習(xí)之Flux架構(gòu)入門
Flux是Facebook在14年提出的一種Web前端架構(gòu),主要用來處理復(fù)雜的UI邏輯的一致性問題(當(dāng)時(shí)是為了解決Web頁面的消息通知問題)。接下來從其特點(diǎn)和使用上來介紹Flux架構(gòu)。本文主要目的是讓你對Flux的一個(gè)架構(gòu)大體面貌有個(gè)了解。2016-08-08
解決EditText不顯示光標(biāo)的三種方法(總結(jié))
下面小編就為大家?guī)硪黄鉀QEditText不顯示光標(biāo)的三種方法(總結(jié))。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04
Android中g(shù)oogle Zxing實(shí)現(xiàn)二維碼與條形碼掃描
這篇文章主要介紹了Android中g(shù)oogle Zxing實(shí)現(xiàn)二維碼與條形碼掃描的相關(guān)資料,需要的朋友可以參考下2017-05-05
android用java和c實(shí)現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法
這篇文章主要介紹了android用java和c實(shí)現(xiàn)查找sd卡掛載路徑(sd卡路徑)的方法,需要的朋友可以參考下2014-02-02

