Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
85
rated 0 times [  86] [ 1]  / answers: 1 / hits: 24161  / 9 Years ago, sat, march 14, 2015, 12:00:00

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,
...


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.



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



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);
}


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>

More From » android

 Answers
18

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);


Syntax of addJavascriptInterface() method



      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*

[#67434] Thursday, March 12, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
jack

Total Points: 557
Total Questions: 96
Total Answers: 80

Location: Saint Helena
Member since Mon, Jan 16, 2023
1 Year ago
;