. # JavaScript. , , .
XML-:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<WebView
android:id="@+id/web"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
:
[Activity (Label = "Scratch.WebKit", MainLauncher = true)]
public class Activity1 : Activity
{
const string html = @"
<html>
<body>
<p>This is a paragraph.</p>
<button type=""button"" onClick=""Foo.run()"">Click Me!</button>
</body>
</html>";
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
WebView view = FindViewById<WebView>(Resource.Id.web);
view.Settings.JavaScriptEnabled = true;
view.SetWebChromeClient (new MyWebChromeClient ());
view.LoadData (html, "text/html", null);
view.AddJavascriptInterface(new Foo(this), "Foo");
}
}
Activity1.html - HTML, . , /button/@onClick, JavaScript Foo.run(). ( "run" ) "r"; .
:
- JavaScript
view.Settings.JavaScriptEnabled=true. JavaScript. view.SetWebChromeClient() MyWebChromeClient ( ). " ": , ; . view.SetWebChromeClient(new WebChromeClient()), :
E/Web Console( 4865): Uncaught ReferenceError: Foo is not defined at data:text/html;null,%3Chtml%3E%3Cbody%3E%3Cp%3EThis%20is%20a%20paragraph.%3C/p%3E%3Cbutton%20type=%22button%22%20onClick=%22Foo.run()%22%3EClick%20Me!%3C/button%3E%3C/body%3E%3C/html%3E:1
.
view.AddJavascriptInterface(), JavaScript "Foo" Foo.
MyWebChromeClient:
class MyWebChromeClient : WebChromeClient {
}
, , , WebChromeClient .: -/
, "" , Foo, "Foo" JavaScript:
class Foo : Java.Lang.Object, Java.Lang.IRunnable {
public Foo (Context context)
{
this.context = context;
}
Context context;
public void Run ()
{
Console.WriteLine ("Foo.Run invoked!");
Toast.MakeText (context, "This is a Toast from C#!", ToastLength.Short)
.Show();
}
}
, Run().
Mono Android Android Callable Wrappers Java.Lang.Object, Java-. Foo, Android Callable Wrapper:
package scratch.webkit;
public class Foo
extends java.lang.Object
implements java.lang.Runnable
{
@Override
public void run ()
{
n_run ();
}
private native void n_run ();
}
view.AddJavascriptInterface(new Foo(this), "Foo") JavaScript "Foo" #. JavaScript "Foo" Android Callable Wrapper, #. (, ...)
"". # Foo Java.Lang.IRunnable, # java.lang.Runnable. , Android Callable Wrapper , java.lang.Runnable Runnable.run. Android , , JavaScript-in-Android, "" #. Android Callable Wrappers. , JavaScript Foo.run() (capital 'R'), Foo.run() ( "r" ), , Android/JavaScript, Run(), Run().
JavaScript Foo.run(), Android Callable Wrapper scratch.webview.Foo.run(), JNI Foo.run() #, , .
run()!
, JavaScript- Run(), , ( , , Mono Android 4.2 [Export], :