参考文献
https://docs.microsoft.com/en-us/uwp/api/Windows.UI.Xaml.Controls.WebView
https://code.msdn.microsoft.com/windowsapps/Universal-Windows-App-bf423aee
https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.webview#Windows_UI_Xaml_Controls_WebView_AddWebAllowedObject_System_String_System_Object_
-
需要些一个小工具,设计到UWP与JavaScript交互问题。经过测试,我选择了UWP的Webview组件。
一、交互方式
1、JS调用UWP C#函数
核心代码:
JavaScript:
try{ $("#text1").text(obj2string(objectTest)); //objectTest是C#类 var result = objectTest.getStr("C#"); //objectTest是C#类 $("#text2").text(result); }catch (err) { $("#text2").text(err.message); }
C#:
using Windows.Foundation.Metadata; namespace RuntimeComponent1 { //this class must be sealed, and must have attribuite [Windows.Foundation.Metadata.AllowForWeb] [AllowForWeb] public sealed class AllowFromWebExample { public string GetStr(string str) { return "Hello " + str; } } } private void mainWeb_NavigationStarting(WebView sender, WebViewNavigationStartingEventArgs args) { this.mainWeb.AddWebAllowedObject("objectTest", new RuntimeComponent1.AllowFromWebExample()); }
注意要点:
- WebView一定要在NavigationStarting时间,使用AddWebAllowedObject绑定交互对象
- 被JS调用的类,必须使用[AllowForWeb]装饰,且必须是sealed类型。
- 被JS调用的类必须是一个运行时组件,不能再主项目内,不然不会有用。
2、JS给UWP C#发送消息
比较简单,看上面微软官网链接。
3、UWP C#调用JavaScript函数
核心代码:
C#:
public async System.Threading.Tasks.Task call() { List<string> arguments = new List<string> { "C# " }; String result = await mainWeb.InvokeScriptAsync("getJSDate", arguments); // bodyHTML. TestTest.Text = result.ToString(); }
JavaScript:
function getJSDate(obj) { return obj + Date(); }