Android WebView Uncaught TypeError:Object [object Object]没有方法

时间:2014-05-20 20:32:10

标签: javascript android webview

我有两个设备,三星平板电脑GT-P3113和Mini-PC rk31 sdk(都是android 4.2.2),运行我的应用程序。我的应用程序使用javascript界面​​来访问java方法。在其中一个设备工作正常(三星),但另一个没有。

BrowsableView - 我的课程扩展了webview


 public class BrowsableView extends WebView {

     @SuppressLint("SetJavaScriptEnabled")
     public BrowsableView(Context context, AttributeSet attrs) {

        super(context, attrs);

        /// configurações para permitir execução de javascript
        WebSettings webSettings =  getSettings();              
        webSettings.setPluginState(PluginState.ON);
        webSettings.setJavaScriptEnabled(true);            

        setClickable(true);

        setKeepScreenOn(true);

        setBackgroundColor(Color.TRANSPARENT);    

        setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);        

        addJavascriptInterface(new WebAppInterface(Config.getContext()), "Android");

        setWebViewClient(new BrowsableViewClient());

        setWebChromeClient(new BrowsableViewChromeClient());
    }

    public void prepareNextHtml(String url){
        loadUrl(url);        
    }

    public class BrowsableViewClient extends WebViewClient{

        @Override
        public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {

            Log.d(TAG, "EVENTO ONERROR DENTRO DO BROWSABLE");                        
            _dispatchBrowsableViewErrorEvent();
        }
    }

    public class BrowsableViewChromeClient extends WebChromeClient{

        @Override
        public boolean onConsoleMessage(ConsoleMessage cm){
            Log.d("WebView", String.format("%s @ %d: %s", cm.message(), cm.lineNumber(), cm.sourceId()));
            Toast.makeText(getContext(), "WebViewConsole: " +  String.format("%s @ %d: %s", cm.message(), cm.lineNumber(), cm.sourceId()), Toast.LENGTH_LONG).show();
            return true;
        }
    }

    public class WebAppInterface {

        Context mContext;

        public WebAppInterface(Context c){
            mContext = c;   
        }            

        @JavascriptInterface
        public void finish(){              
            handler.removeCallbacksAndMessages(null);

            Toast.makeText(getContext(), "Evento onCompletion no BrowsableView  - Android.finish().", Toast.LENGTH_LONG).show();                      
            _dispatchBrowsableViewCompletionEvent();
        }
    }
}

Html示例

<html>
<head>
<script type="text/javascript">
    setTimeout("Android.finish()",8000);    
</script>
</head>
<body width="100%" height="100%">
    <img width="100%" height="100%" src="654138997615629/teste.jpg" />    
</body>
</html>

在Mini-Pc设备中无法识别javascript界面​​的方法并返回错误

  

未捕获的TypeError:对象[object Object]没有方法&#34;完成&#34;

1 个答案:

答案 0 :(得分:-1)

我有类似的问题。在一些4.4.2设备上进行了回调,有些则没有。我发现降级'AndroidManifest.xml'中的SDK有助于:

<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="16"
/>

而不是19和19.现在,即使在忽略它的设备上,也会发生从JavaScript到@JavascriptInterface方法的回调。