我想将内容注入(inject)到从 WebView Control 调用的网页中,html 代码是:
<section id="header" class="header-section section-padding">
<div class="container">
<div class="row">
<div class="text-center">
<h2 class="section-title">Text I Want to Change</h2>
</div>
</div>
</div>
</section>
我从 this tutorial 尝试过这个:
string functionString = String.Format("document.getElementById('header').getElementsByTagName('h2')[0].innerHTML = 'new text';");
await webView1.InvokeScriptAsync("eval", new string[] { functionString });
但这会产生错误。我不擅长 javascript,那么如何更改 h2
标记内的文本?
Xaml 代码:
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<WebView x:Name="WebView"
LoadCompleted="WebView_LoadCompleted"
Source="http://info.vit.ac.in/gravitas2015/tg15/index.html" />
<ProgressRing x:Name="ProgressRing"
Width="100"
Height="100"
Foreground="BlueViolet"
IsActive="True" />
</Grid>
Cs代码:
private async void WebView_LoadCompleted(object sender, NavigationEventArgs e)
{
string functionString = String.Format("document.getElementById('header').getElementsByTagName('h2')[0].innerHTML = 'new text';");
await WebView.InvokeScriptAsync("eval", new string[] { functionString });
ProgressRing.Visibility = Visibility.Collapsed;
}
我收到的错误:
System.Exception was unhandled by user code
HResult=-2147352319
Message=Exception from HRESULT: 0x80020101
Source=mscorlib
StackTrace:
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at WindowsApp2.Views.Organisers.<WebView_LoadCompleted>d__1.MoveNext()
InnerException:
要重现该问题:
- 创建 Template10 汉堡模板
- 添加一个新的 xaml 页面(例如 team.xaml)并将此页面添加到 hamburger shell(用于导航到此页面的新汉堡按钮)
- 在 team.xaml 中复制我的代码。
- 现在运行它并从汉堡菜单导航到此页面。
- 这将生成上述错误。
提前致谢!
最佳答案
这里的问题是,您的 html 页面中没有 id
为“header”的 section
:http://info.vit.ac.in/gravitas2015/tg15/index.html .
如果我们在网络浏览器(例如 Edge)中测试 JavaScript 代码,我们会发现它会抛出如下错误:
这就是为什么我们在代码隐藏中调用 InvokeScriptAsync
时出现异常的原因。我不确定您要更改哪个部分
,但如果您按如下方式编辑 JavaScript 字符串,您的代码应该能够工作。
string functionString = String.Format("document.getElementById('portfolio').getElementsByTagName('h2')[0].innerHTML = 'new text';");
除此之外,WebView.LoadCompleted event Windows 8.1 之后的版本可能会更改或不可用。相反,请使用 NavigationCompleted .
关于javascript - 修改Webview控件中传输的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39212221/