首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android WebView TypeError: Object [ Object ]没有方法

Android WebView TypeError: Object [ Object ]没有方法
EN

Stack Overflow用户
提问于 2014-05-20 20:32:09
回答 1查看 2.5K关注 0票数 0

我有两个设备,三星平板电脑GT 3113和Mini rk31 sdk (都是Android4.2.2),运行我的应用程序。我的应用程序使用javascript接口访问java方法。在这两款设备中,一款运行良好(三星),而另一款则不行。

BrowsableView -我的类扩展了webview

代码语言:javascript
复制
 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示例

代码语言:javascript
复制
<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接口的方法,并返回类似的错误。

Uncaught :对象对象没有方法“完成”

EN

回答 1

Stack Overflow用户

发布于 2015-10-02 07:45:39

我也有类似的问题。在一些4.4.2设备上进行了回调,而在一些设备上没有回调。我发现在“AndroidManifest.xml”中降低SDK的级别是有帮助的:

代码语言:javascript
复制
<uses-sdk
    android:minSdkVersion="16"
    android:targetSdkVersion="16"
/>

现在,从JavaScript到@JavascriptInterface方法的回调甚至发生在忽略它的设备上。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23769397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档