Xamarin IOS Cant在JavascriptCore中绑定函数或回调

时间:2018-08-09 10:36:04

标签: c# ios .net xamarin javascriptcore

以下是示例:JSContext

我收到以下异常:

{TypeError: myCSharpObject.myFunc is not a function. (In 'myCSharpObject.myFunc()', 'myCSharpObject.myFunc' is undefined)} 

我的代码如下:

        JSContext _context;
        _context = new JSContext();

        var jsCallback = new MyJSExporter();

        _context[(NSString)"myCSharpObject"] = JSValue.From(jsCallback, _context);

        var result = _context.EvaluateScript("myCSharpObject.myFunc();");

协议定义为:

[Protocol]
    interface IMyJSVisibleProtocol : IJSExport
    {
        [Export("myFunc")]
        int MyFunc();

        [Export("Arity2:With:")]
        NSObject Arity2With(NSObject arg1, NSObject arg2);
    }

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

异常处理程序为:

       _context.ExceptionHandler = (context, exception) => {
            // {TypeError: myCSharpObject.myFunc is not a function. (In 'myCSharpObject.myFunc()', 'myCSharpObject.myFunc' is undefined)}
        };

2 个答案:

答案 0 :(得分:0)

您使用了错误的JSContext。 在您的代码中,您正在初始化新的JSContext。相反,您想从文档中获取JSContext,该文档已在webView中加载:var context = (JSContext)webView.ValueForKeyPath((NSString)"documentView.webView.mainFrame.javaScriptContext");

Here is fully working test view controller!

答案 1 :(得分:0)

最终为我解决的问题是添加了build mtouch参数:

'-registrar:static'

enter image description here