我的Windows 10通用应用程序正在使用一个webview,它使用InvokeScript调用JS函数“eval”,同时将一些其他javascript注入函数。但是,当我测试它时,没有任何反应。调试显示脚本正确存储并且正在访问该功能,但webview似乎根本没有更新。
private void browser1_LoadCompleted_1(object sender, NavigationEventArgs e)
{
try
{
count++;
browser1.InvokeScript("eval", test);
}
catch (Exception E)
{
}
address.Text = browser1.Source.ToString();
}
}
此代码在Windows Phone 8及更早版本中运行良好。但现在使用Windows 10 webview,它似乎没有任何效果。这是将我的脚本存储在测试变量中的代码:
private async void ReadFile()
{
string fileContent;
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri(@"ms-appx:///Script.js"));
using (StreamReader sRead = new StreamReader(await file.OpenStreamForReadAsync()))
fileContent = await sRead.ReadToEndAsync();
test = new string[] { fileContent };
}
我不确定为什么没有发生。我已经确认调用InvokeScript时测试变量确实包含脚本。我甚至使用不同且更简单的JS脚本测试了InvokeScript,这些脚本肯定适用于此应用程序的Windows Phone 8版本。在调用JS函数时,是否有一些我缺少的东西让webview更新?
答案 0 :(得分:4)
原来解决方案非常简单。显然,在Windows 10 UWP中不推荐使用InvokeScript,现在只有InvokeScriptAsync可以使用。所以我所要做的就是让我的方法成为异步方法,然后等待InvokeScriptAsync调用。
答案 1 :(得分:1)
Windows 10中的InvokeScript仅适用于受信任的来源。我试过并得到了和你一样的结果。之前在Win 8上运行的确切脚本不再适用于UWP。