Android JS橋交互("Uncaught ReferenceError: xxx is not defined or xxx has no method")


 


網上android和js交互的代碼有不少,也很容易搜到。最近在做的項目需要用到js橋,遇到了一些問題,記錄下來,希望以后遇到能馬上解決掉。

一開始我找的demo是從這個:http://blog.csdn.net/beyond0525/article/details/9374301 
上面有js調用android的代碼,也有android調用js的代碼,很全面,在API 17一下跑起來都OK的,但是我們升級API 版本,問題就來了,android調用js沒有問題,js調用android會有一些小問題。

查看log日志

[INFO:CONSOLE(1)] "Uncaught ReferenceError: is not define I/chromium(490): [INFO:CONSOLE(1)] "Uncaught SyntaxError: Unexpected token ILLEG [Android] Web Console: Uncaught TypeError: Object [object Object] has no method 'xxx'

 

會發現Uncaught ReferenceError: xxx is not defined or xxx has no method 這個異常,要么是xxx變量或者方法沒有定義,要么是xxx找不到這個方法。

解決方法

添加一個自定義的WebViewClient,指定加載步驟,在瀏覽器的網頁完全顯示的時候,在調用js橋。

mWebView.setWebViewClient(new WebViewClientDemo()); lass WebViewClientDemo extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // 當打開新鏈接時,使用當前的 WebView,不會使用系統其他瀏覽器 view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 在這里執行你想調用的js函數 // android 調用js代碼 // mWebView.loadUrl("javascript:funFromjs()"); // js調用android代碼,設置本地調用對象及其接口 mWebView.addJavascriptInterface(new JsObject(), "android"); } }

 

如果加上以上代碼還沒有解決問題的話,看來我們需要加上一些特技了。 
1.我們需要給js調用android的方法加上一個@JavascriptInterface的注解

    class JsObject{

        @JavascriptInterface public void funAndroid() { Toast.makeText(mContext, "調用android本地方法funAndroid!", Toast.LENGTH_LONG).show(); } }

2.一個比較奇怪的問題,有的HTML界面需要加上 mWebView.loadData(“”, “text/html”, null); 
這個好像跟H5界面有關的。

這樣,js橋叫可以在高版本的 API 上正常的和android客戶端交互了。

Demo地址: http://download.csdn.net/detail/u012301841/9279911


免責聲明!

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



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