2015-02-12 3 views
3

У меня есть эта проблема с сообщением CefSharp и js. Это моя структура. В моем MainWindow.xaml.cs у меня есть:РегистрацияJsObject CefSharp не работает

chromium = new CefSharp.Wpf.ChromiumWebBrowser(); 
chromium.RegisterJsObject("jsInterface", new jsMapInterface()); 

где jsMapInterface общественный класс с его методами.

В моем HTML/JS папку, я вызываю метод C# с:

window.jsInterface.myTest(); 
//jsInterface.myTest(); //I have tested twice 

где MyTest() является методом внутри jsMapInterface класса, но ничего не происходит. Где моя ошибка?

Спасибо, советую.

ответ

7

Try верхний регистр на стороне C# например MyTest(), как упоминалось в Обратите внимание в https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#3-how-do-you-expose-a-net-class-to-javascript

CefSharp действительно выполняет имя коверкая. Причина в том, что он пытается поощрять следующие соглашения JS на стороне JS и соглашениях C# с этой стороны.

Наконец работать из примера кода на https://github.com/cefsharp/CefSharp/search?utf8=%E2%9C%93&q=BoundObject

+0

Я решил! Я пишу MyTest() на стороне C# и myTest() в js-стороне. Благодаря!! –

0

Привет Я предполагаю, что может быть поздно на это ... но все выглядит как он подключен вверх хорошо для меня ... но, возможно, вы должны держать модульный реф в new jsMapInterface(), чтобы гарантировать, что он не будет уничтожен/очищен.

+1

Как правило, хороший совет для 'var MyJsMapInterface = new jsMapInterface() ;, например, вместе с созданием« браузера », а затем с использованием этого var в вашем вызове' RegisterJsObject() 'я не думаю, что это проблема здесь. По крайней мере, примерный поиск кода, который я дал в моей второй ссылке, имеет то же самое, что и @salvo italy. Я подозреваю, что это работает, потому что вызов 'RegisterJsObject' держится за ссылку на объект, чтобы он не собирал мусор. – jornh

Смежные вопросы