【问题标题】:Xamarin IOS Cant Bind function or callback In JavascriptCoreXamarin IOS无法在JavascriptCore中绑定函数或回调
【发布时间】:2018-08-09 10:36:03
【问题描述】:

按照此处的示例: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


    【解决方案1】:

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

    '--registrar:static'

    【讨论】:

      【解决方案2】:

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

      Here is fully working test view controller!

      【讨论】:

      • 我不是故意使用 web 视图,我想在原生视图后面运行 javascript。
      • 请首先在您的问题中说明这一点。如果您不想使用 webView,则需要实例化 JSVirtualMachine 并将其作为参数传递给 JSContext。 JSVirtualMachine vm = new JSVirtualMachine(); var context = new JSContext(vm);
      • 您好,我认为您的帖子很有帮助。实际上为我解决这个问题的是设置构建参数'--registrar:static'
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多