WebView:未捕获的ReferenceError:未定义Android [英] WebView: Uncaught ReferenceError: Android is not defined

查看:89
本文介绍了WebView:未捕获的ReferenceError:未定义Android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用代码创建WebView,而不是通过XML布局加载。 webview似乎已正确创建,但我看到错误:

I am creating a WebView with code rather than loading via an XML layout. The webview appears to be created properly, but I am seeing the errors:

W/AwContents( 4564): nativeOnDraw failed; clearing to background color.
I/chromium( 4564): [INFO:CONSOLE(1)] "Uncaught ReferenceError: Android is not defined", 
...

如果我将WebView放在我的XML布局中,我不会收到这些错误。请注意,如果脚本运行,它会将onLoadEvent字段值从no更改为yes。这种情况正在发生,因此显然脚本正在运行。但是,它并没有获取用户名和密码,表明Android 未定义。

If I put the WebView in my XML layout, I don't get these errors. Notice that, if the script runs, it will change the onLoadEvent field value from "no" to "yes. That is happening, so evidently the script is running. It is not fetching the user name and password, though, indicating that "Android" is not defined.

我还尝试在webView.loadData()之前执行addView();同样的错误。

I have also tried executing addView() before webView.loadData(); same errors.

以下是创建WebView的代码:

Here's the code that creates the WebView:

  @SuppressLint("SetJavaScriptEnabled")
  private void onOk ()
  {
    Log.d ("RegTest", "onOk");
    webView = new WebView (this);
    webView.setLayoutParams (new ViewGroup.LayoutParams(
        ViewGroup.LayoutParams.MATCH_PARENT,
        ViewGroup.LayoutParams.MATCH_PARENT));    
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled (true);
    CharSequence cs = readAsset ("input_form");
    webView.loadData (cs.toString(), "text/html", "UTF-8");

    contentView.addView (webView);
  }

这里是input_form的剪辑,它是WebView的源代码内容:

And here are snips of "input_form", which is the source for the WebView content:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  ...
  <script type="text/javascript">
    function onLoadValues ()
    {
      document.getElementById ("onLoadEvent").value = "yes";
      document.getElementById ("FullName").value = Android.getFullName();
      document.getElementById ("EmailAddress").value = Android.getEmailAddr(); 
    }
  </script>
</head>

<body onload="onLoadValues()">
  <form name="catwebformform52174" method="post" ...>
    <fieldset>
      <div class="pure-control-group">
        <label for="onLoadValues">onLoadEvent</label>
        <input id="onLoadEvent" name="onLoadEvent" type="text" placeholder="no">
      </div>
      <div class="pure-control-group">
        <label for="FullName">Name</label>
        <input id="FullName" name="FullName" type="text" placeholder="Name">
      </div>
      <div class="pure-control-group">
        <label for="EmailAddress">Email Address</label>
        <input id="EmailAddress" name="EmailAddress" type="email" placeholder="Email Address">
      </div>
    </fieldset>
  </form>
</body>
</html>


推荐答案

你没有定义 Android 作为 javascripinterface 你必须写下以下行

You didn't defined Android as a javascripinterface you have to write below lines

 // If your callback methods are in same class then just same class object
 webView.addJavascriptInterface(this, "Android");

addJavascriptInterface()方法的语法

      addJavascriptInterface(Object object, String name);        
   //  1. `object` – *the Java object to inject into this WebView’s JavaScript context.*
   //  2. `name` – *the name used to expose the object in JavaScript*

这篇关于WebView:未捕获的ReferenceError:未定义Android的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆