Xamarin IOS 无法在 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)}

        };


慕田峪9158850
浏览 221回答 2
2回答

慕工程0101907

最终为我解决这个问题的是添加 build mtouch 参数:'--注册器:静态'

至尊宝的传说

您使用了错误的 JSContext。在您的代码中,您正在初始化新的 JSContext。相反,您希望从您在 webView 中加载的文档中获取 JSContext :var context = (JSContext)webView.ValueForKeyPath((NSString)"documentView.webView.mainFrame.javaScriptContext");这是完全工作的测试视图控制器!
打开App,查看更多内容
随时随地看视频慕课网APP