javascript - 修改Webview控件中传输的数据

标签 javascript c# xaml webview uwp

我想将内容注入(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: 

要重现该问题:

  1. 创建 Template10 汉堡模板
  2. 添加一个新的 xaml 页面(例如 team.xaml)并将此页面添加到 hamburger shell(用于导航到此页面的新汉堡按钮)
  3. 在 team.xaml 中复制我的代码。
  4. 现在运行它并从汉堡菜单导航到此页面。
  5. 这将生成上述错误。

提前致谢!

最佳答案

这里的问题是,您的 html 页面中没有 id 为“header”的 section:http://info.vit.ac.in/gravitas2015/tg15/index.html .

如果我们在网络浏览器(例如 Edge)中测试 JavaScript 代码,我们会发现它会抛出如下错误:
enter image description here

这就是为什么我们在代码隐藏中调用 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/

相关文章:

矩阵变换图像上的 C# 光标位置

c# - XAML 中的 WPF ListView 绑定(bind) ItemsSource

xaml - 每个平台在 XAML 中定义的 FontFamily

javascript - 在 Openui5 中按项目触发函数

javascript - 链接的 jquery 事件处理

c# - ASP.NET 中的 MySQL 异常

c# - 在 net.tcp wcf context 上传输用户信息

c# - WPF 在异步文件复制期间显示进度条

javascript - 在 Chrome 中打开开发者工具时,Google map v3 非常慢

javascript - 在 HTML 标签中动态加载 JSON 信息