标签:handler c# ber mob element mda tca bsp put
var context = (JSContext)WebView.ValueForKeyPath((NSString)"documentView.webView.mainFrame.javaScriptContext"); context.ExceptionHandler = (JSContext context2, JSValue exception) => { Console.WriteLine("JS exception: {0}", exception); }; //可以使用 js调用 c# 代码,和安卓一样,通过使用 myCSharpObject对象调用c#方法 var myExporter = new MyJSExporter(); context[(NSString)"myCSharpObject"] = JSValue.From(myExporter, context); //var nsUrl = new NSUrl("demoTest.html", false); //var nsRequest = NSUrlRequest.FromUrl(nsUrl); NSUrl url = NSBundle.MainBundle.GetUrlForResource("main", "html"); string htmlString = NSString.FromData(NSData.FromUrl(url), NSStringEncoding.UTF8); WebView.LoadHtmlString(htmlString, NSBundle.MainBundle.BundleUrl);
声明接口
/// <summary> /// js调用c#代码的方法接口 /// </summary> [Protocol()] interface IMyJSVisibleProtocol : IJSExport { [Export("myFunc")] int MyFunc(); [Export("Arity2:With:")] NSObject Arity2With(NSObject arg1, NSObject arg2); }
实现方法
/// <summary> /// 方法实现 /// </summary> class MyJSExporter : NSObject, IMyJSVisibleProtocol { public int MyFunc() { Console.WriteLine("Called!"); return 42; } public NSObject Arity2With(NSObject arg1, NSObject arg2) { Console.WriteLine("Arity 2 function called with " + arg1 + " " + arg2); return (NSNumber)42; } }
js调用
<script type="text/javascript"> function callXamObject() { // `myCSharpObject` injected into JS context by C# code `context [(NSString) "myCSharpObject"] = JSValue.From (...etc...` alert("123"); var resultCalculatedInCSharp = myCSharpObject.myFunc(); document.getElementById("Output").innerHTML = resultCalculatedInCSharp; } function callArity2Method() { //Note how this is mapped by [Export ("Arity2:With:")] var result = myCSharpObject.Arity2With("foo", "bar"); } </script>
标签:handler c# ber mob element mda tca bsp put
原文地址:https://www.cnblogs.com/xyunp/p/9108734.html