参考文献
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();
}