以下示例: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)}
};
您正在使用错误的JSContext。在您的代码中,您正在初始化新的JSContext。相反,你想从文档中获取JSContext,你在webView中加载了什么:var context = (JSContext)webView.ValueForKeyPath((NSString)"documentView.webView.mainFrame.javaScriptContext");