"未捕获TypeError:window.HTMLOUT.showHTML不是函数"

时间:2016-01-12 14:43:16

标签: javascript java android android-webview

我正在尝试注入JavaScript以便在加载webView时读取特定值。

这些是我用于webView的属性。

    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setCacheMode(2);
    webView.getSettings().setDomStorageEnabled(true);
    webView.clearHistory();
    webView.clearCache(true);
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setSupportZoom(true);
    webView.getSettings().setUseWideViewPort(false);
    webView.getSettings().setLoadWithOverviewMode(false);
    webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");

我在我的onPageFInished()方法中注入了javacript。

        @Override
        public void onPageFinished(final WebView view, final String url) {
            webView.post(new Runnable() {
                @Override
                public void run() {
                    webView.loadUrl("javascript:window.HTMLOUT.showHTML('<head>'+document.getElementsByTagName('input')[0].value+'</head>');");   
                }
            });
            super.onPageFinished(view, url);
        }

以下代码为MyJavaScriptInterface

public  class MyJavaScriptInterface{

    @JavascriptInterface
    public void showHTML(String html_data) {
        if(html_data.contains("response_code")){
            Log.e(TAG, " ======>  HTML Data : "+  html_data);
            new MakeQueryPayment().execute();
        }        
    }
}

我从Logcat中捕获错误。

01-08 17:56:43.701 I/chromium(27026): [INFO:CONSOLE(1)] "Uncaught TypeError: window.HTMLOUT.showHTML is not a function", source:  (1)

我只在三星Galaxy Tab A 中遇到此问题,型号为 SM-T550 ,Android版本为 5.0.2 。在我们拥有的其他设备中,它可以正常工作。任何人都可以帮助我解决这个问题。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

我尝试使用Galaxy Tab 4,此代码在此设备上运行良好。

  

WebView属性

public Task(ObservableCollection<TaskExecutionHistoryModel> ExecutionHistory)
{
   TaskAll = someValue;
   someOtherValue = TaskAll;
}
  

JavaScript界面​​

WebView webView = new WebView(this);
setContentView(webView);
webView.clearHistory();
webView.clearCache(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setCacheMode(2);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setUseWideViewPort(false);
webView.getSettings().setLoadWithOverviewMode(false);
webView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
webView.loadUrl("http://stackoverflow.com/questions/34746626/uncaught-typeerror-window-htmlout-showhtml-is-not-a-function");

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
            return true;
    }              

    @Override
    public void onPageStarted(WebView view, String url,
                    Bitmap favicon) {
    }

    public void onPageFinished(WebView view, String url) {
        view.loadUrl("javascript:window.HTMLOUT.showHTML('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
    }
});

答案 1 :(得分:0)

对我来说,由于在升级到最新的targetSDK之前运行良好,因此我只需要在所有功能上添加注释@JavascriptInterface

示例:

@JavascriptInterface
public void eventDragStart() {
    // do somthing
}