Xamarin IOS在JavascriptCore中绑定功能或回调

问题描述 投票:0回答:2

以下示例: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)}
        };
c# ios .net xamarin javascriptcore
2个回答
0
投票

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

Here is fully working test view controller!


0
投票

最后修复此问题的是添加build mtouch参数:

'--registrar:静态'

enter image description here

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.