Android - JS和Android互相調用以及傳參


Android中使用WebView來與JavaScript交互。

JS調用Android中的方法:

1. 調用WebView關聯的WebSettings的setJavaScriptEnabled(true)啟用JS。

2. 調用WebView關聯的addJavascriptInterface(Object object, String name)方法將object對象暴露給JS。

3. 在JavaScript腳本中通過剛才暴露的name對象調用Android方法。

實例:

android代碼:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_test_web, container, false);
    webView = (WebView) v.findViewById(R.id.test_web_content);
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDomStorageEnabled(true); // 兼容HTML5的DomStorage
    webView.setWebViewClient(new MyWebViewClient()); // 新建MyWebViewClient對象,為了webview不啟動外部瀏覽器加載網頁,像Chrome,UC等,使其在內部加載內容
    webView.addJavascriptInterface(new ClickTransferHistory(),"transferhistory");// 點擊transfer history按鈕顯示
    
    return v;
}
public class ClickTransferHistory extends Object {
    @JavascriptInterface
    public  void TransferHistoryClickToTransactions(String parameterGotFromJS){
        // parameterGotFromJS為JS傳給Android的參數,注意JS不能直接傳對象給Android
  } }

 

此時JS可以通過transferhistory.TransferHistoryClickToTransactions來調用android中的TransferHistoryClickToTransactions()方法。

JS代碼:
<input type="button" value="Show Transfer History" onClick="transferhistory .TransferHistoryClickToTransactions(data)" />

  

Android調用JS中的方法,其中request為參數:

public void invokeJSMethod(final String pin, Handler handler) {
        //to do
        this.mHandler = handler;
        if (!TextUtils.isEmpty(callBack)) {
            webView.post(new Runnable() {
                @Override
                public void run() {
                    String request = "{'type':'CHALLENGE_OTP', 'mode':'ONLINE', 'challengeOtp':'"+pin+"'}";
                    webView.evaluateJavascript("javascript:"+callBack + "(" + request + ")", new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String value) {}
                    });
                }
            });
        }
    }

 




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM