Вызов Native C# из WinJS, который загружен в WebView
Я знаю, что можно назвать родным C#
от WinJS
создав компонент времени выполнения Windows, а затем добавив его в качестве ссылки на WinJS
приложение - но возможно ли сделать то же самое из WinJS
приложение, когда оно загружено внутри WebView
?
Я пробовал, но, похоже, WinJS
приложение внутри WebView
работает в совершенно другом контексте или что-то в этом роде и не находит символы, поэтому он вылетает и предлагает запустить новый экземпляр VS2013
попробовать и отладить.
1 ответ
Вы правы в том, что контекст хоста приложения для нативного приложения JavaScript и контекст веб-просмотра - это две разные вещи. Только хост приложения позволяет JavaScript взаимодействовать с WinRT, что также относится и к компонентам WinRT, поскольку компоненты структурированы так же, как и сами API WinRT. По сути, ваш вопрос такой же, как вопрос о том, можете ли вы загрузить компонент WinRT в веб-браузер (потому что веб-просмотр - это, по сути, элемент управления веб-браузера), тогда ответ - нет.
Единственный способ для кода внутри веб-просмотра выйти из этого контекста и поговорить с любым кодом (JS, C# и т. Д.), Который может получить доступ к WinRT API, - это использовать window.external.notify из веб-просмотра. Приложение воспринимает это сообщение как событие, исходящее из веб-просмотра (в JS с x-ms-webview это MSWebViewScriptNotify, в C#/VB с XAML WebView это ScriptNotify). Затем приложение может обработать аргументы вызова API в ответ.
Конечно, поскольку window.external.notify не действует как вызов функции, поскольку вы можете возвращать значение, приложению придется отправлять результаты в веб-представление через метод InvokeScriptAsync, что делает его асинхронным.
Я подробнее расскажу о деталях в главе 4 (начиная со страницы 204) моей бесплатной электронной книги " Программирование приложений Магазина Windows с использованием HTML, CSS и JavaScript, 2-е издание", http://aka.ms/BrockschmidtBook2.