I have a webview in a alertbox, in this webview I have a <textarea>
Anyone have an idea how to get the texts typed in this field and be used in the android app. as normal Edittext fields
Happy Coding..!
Its not possible as you are saying. An alternative can be helpful. You should add an interface to your WebView which contains a method which can get value from web page. You have create and to call a javascript function which can pass the value of your textarea to your interface function by using that Interface. I hope you understand.
For example: Add an interface to your Webview like:
mainView.addJavascriptInterface(MyOwnCreatedClassName, "AndroidInterface");
Here MyOwnCreatedClassName is the name of the class which will contain that method and AndroidInterface is the name that the Javascript will use to call that method.
for complete example follow:
Using webView.AddJavascriptInterface with MonoDroid
Related
I am creating a javascript api for my application and I want to use namespaces in my javascript code. However I am unable to get it to work nor find any information on the issue.
Desired Functionality:
HTML:
<script>
Android.typeOne.methodName();
Android.typeTwo.methodName();
</script>
Java Code:
webView.addJavascriptInterface(new TypeOneInterface(context), "Android.typeOne");
webView.addJavascriptInterface(new TypeTwoInterface(context), "Android.typeTwo");
However this never works, if I remove .typeOne and have: Android.methodName then that works fine.
I'm looking at the documentation of addJavascriptInterface. It says that The Java object's fields are not accessible. Since typeOne would have to be a property on the exported Java Object, it seems you would need to arrange the "namespace" by hand. That is, export TypeOne and put it in the global JavaScript Android object.
So I'm guessing you need to create empty objects, and put stuff in them as needed.
<script>
// after stuff has been "injected into the JS context of the main frame"
Android = {};
Android.typeOne = window.TypeOne;
... and
webView.addJavascriptInterface(new TypeOneInterface(context), "TypeOne");
This answer is a guess, I have never used JavaScript in a WebView.
I think that javascript understand that you are calling methodeName on object typeOne that is a child of object Android. But you don't have any object named Android nor typeOne.
The dot in javascript is used for hierarchy betweens parents and child.
You should try to use name without dots or, call your object differently (perhaps window["Android.typeOne"].methodName();
I would like to know how I can get a value from a webview.
For example, to load a value into the webview I use:
myWebView.loadUrl("www.example.com");
myWebView.loadUrl("javascript:document.getElementById('username').value='"+ user + "';");
Now I would like to read some text from a certain ID from a webpage.
Something like:
myWebView.loadUrl("www.example.com");
myWebView.getUrl("javascript:document.getElementById('username').toString(user);");
Is this possible?
Edit: Since KitKat (API 19), the WebView class provides the method evaluateJavascript that allows to execute javascript and get the return values.
For olders API, you can still bind javascript to your Android Java code (look here)
So, you will implement a Javascript interface class and add it to your WebView and then call something like
myWebView.loadUrl("javascript:MyJavascriptInterface.getValue(document.getElementById('username').value);");
This will call the method getValue (this is a custom function, it is up to you to rename it as you want) in your class that is used as a Javascript interface, and change MyJavascriptInterface with the name you specified in addJavascriptInterface.
Yes, you can. getElementById('username').Value
I am creating an android app in which, I want to call the function in the .java class from the
Html page on the button click. I'm not sure how to do that as i'm quite new to android. So, please help me.
You can create a Class and bind JavaScript in a WebView to its methods:
webView.addJavascriptInterface(new MyClass(), "my_class");
from JavaScript you caninvoke that method:
my_class.doStuff();
See Android Documentation for more info.
You Have to add one class in Android which will act as an Interface bridge between Html an Java. And in Callback method you will handle events from Html.
Add below code at java side to add interface -
webView.addJavascriptInterface(new ClassName,INTERFACE_NAME);
From javascript call
INTERFACE_NAME.method()
I am displaying a html in a custom activity with a webview. I am overriding
public boolean shouldOverrideUrlLoading(WebView view, String url) {
to intercept certain urls. Now I would like to be able to figure out some more details about the html around that url.
In my case I would like to get the html element that contains the url. E.g. if the url comes from
Manfred Moser
I would like to be able to somehow retrieve the value "Manfred Moser" from within the anchor tag. Is there a way to do that. I found that you do not have access to the DOM from Java.
One way I can think of would be to download the page separately and parse it all before even loading it in webview. However that is an ugly hack at best. Is there a better way?
There is a dirty hack:
Bind some Java object so that it can be called from Javascript with WebView:
addJavascriptInterface(javaObjectExposed, "JSname")
Force execute javascript within an existing page by
WebView.loadUrl("javascript:window.JSname.passData("some data");");
Described here: http://lexandera.com/2009/01/extracting-html-from-a-webview/
Note: this is a security risk - any JS code in this web page could access/call your binded Java object. Best to pass some one-time cookies to loadUrl() and pass them back your Java object to check that it's your code making the call.
In addition to #Peter Knego's approach, there is the inverse:
Use addJavascriptInterface(), per his step #1
For your link, use an onClick attribute on your <a> tag to call out some method on the Java object from step #1, where the Java object turns around and loads the URL into the WebView, and supplies whatever sort of identifying information you want.
Suffice it to say, there's no way to get the information you want from shouldOverrideUrlLoading().
How can I retrieve the Javascript function value from a web page loaded withing a webview component??
You can't, directly.
You can call the Javascript function via loadUrl("javascript:..."), where ... is your function call. However, you cannot get a result this way.
If you inject a Java object into the Web page via addJavascriptInterface(), you could set up another function that called the function you want and returns that value via a call to the injected Java object. That only works if you can modify the Web page, though.