Android Web-view错误I / chromium:[INFO:CONSOLE(1)]"未捕获的ReferenceError:

时间:2017-04-01 07:10:10

标签: javascript android webview

我有一个网络服务我已经为android添加了条形码阅读器

所以在JavaScript的帮助下,我从web-view

调用我的条形码阅读器

那样I followed this

并在服务器端设计...... 我有这个

在JavaScript

java.io.*

在Android端 在网页浏览中

    function mybarcd() {
           MyApp.mybarcdt();
        }

    function actfromAnd(msg){
           document.getElementById("brcd").value = msg;
       }


    at HTML/PHP

    <div class="data"> 
            <input id="brcd" type="text" value=""/>
            <button type="button" onClick="mybarcd()">SCAN</button>
    </div>

和新的js界面

    webView.addJavascriptInterface(new WebAppInterface(this), "MyApp");

我的问题是它在单个Html / PHP文件中工作正常,在同一页面或单独页面上有Js我测试了它的扫描并在输入框中更新了值...

但由于我在一个webview中使用了多个页面或框架,因此无法正常工作...... 它缺少的JS值......如何在点击时将服务器打开扫描器...但扫描后的值没有传递给JS的输入框我得到这个错误.....

    @JavascriptInterface
    public void mybarcdt() {

                IntentIntegrator intentIntegrator = new IntentIntegrator(Main_A.this);
                intentIntegrator.setBeepEnabled(true);
                intentIntegrator.setOrientationLocked(true);
                intentIntegrator.setPrompt("Scan Barcode");
                intentIntegrator.initiateScan();
            }



    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (result != null) {
            if (result.getContents() == null) {
                Log.d("ScanActivity", "Cancelled scan");
                Toast.makeText(this, "Cancelled", Toast.LENGTH_LONG).show();

            } else {

                Log.d("ScanActivity", "Scanned");

                String bcval = result.getContents();
                if (android.os.Build.VERSION.SDK_INT < 19) {
                    webView.loadUrl("javascript:actfromAnd(\""+bcval+"\")");
                }else{
                    webView.evaluateJavascript("javascript:actfromAnd(\""+bcval+"\")", null);
                }
                System.out.println("javascript:actfromAnd(\""+bcval+"\")");

            }
        } else
            super.onActivityResult(requestCode, resultCode, data);
    }

更新

1)我hava尝试在静态页面中使用JS,在PHP / HTML页面中 2)我也在一个带有JS单独页面的静态页面中尝试过 在上述两个条件下,其工作正常

但是在我的网络服务中,我已经给出了在静态页面中成功运行的Same JS文件,我有一个用于My Webservice和静态页面的单个JS文件,它在静态中工作正常,但在MY webservice live中没有工作..如何JS正在加载因为点击它从JS和它打开的相机的wokring 但是在扫描它不会进入网络输入后进行响应

据我所知,我收到错误因为...

  

在我的实时页面中我有一个MainMenu Inside菜单当我选择一个应用程序加载到I/chromium: [INFO:CONSOLE(1)] "Uncaught ReferenceError: actfromAnd is not defined", source: (1) 所以我的Android Activity在扫描后响应是ping到Mainmenu页面但是对于菜单没有名为{的Js函数{1}}所以我收到错误......

在这里,我无法提供该特定页面的网址(iframe)由于取决于菜单会改变,我可以直接提供仅登录或MainMenu链接。但不能用于特定页面内的菜单

任何人都可以建议我......

2 个答案:

答案 0 :(得分:1)

在您的父菜单中的Web服务中添加此脚本,该菜单包含iframeiframes

<script>
function actfromAnd(msg){
window.frames['yourExactframe'].document.getElementById("brcd").value = msg;
}
</script>

如果您在多个框架中使用相同的框架,则全局声明您的框架名称

我尝试了你的Code Code Fine ...在我的例子中Frame Hope它适合你

好问题....

答案 1 :(得分:0)

  • 您应该在加载页面时执行javascript

    mWebView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:myFunction()"); } });

  • 代码将被执行并找到您的javascript函数。你现在的方式不会等待。