首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebView2 -使用HtmlTextWriter更新innerHTML

WebView2 -使用HtmlTextWriter更新innerHTML
EN

Stack Overflow用户
提问于 2021-04-08 01:51:00
回答 2查看 303关注 0票数 1

是否可以在WebView2中使用ExecuteScriptAsync方法设置/更新innerHTML,或者是否有其他方法可以绕过它?

我创建了以下方法来更新DOM。除了innerHTML之外,它工作得很好

代码语言:javascript
复制
private async Task UpdateElementAsync(string elementID, string property, string value)
{
      try
      {
          await this.navigation.CoreWebView2.ExecuteScriptAsync("document.getElementById('" + elementID + "')." + property + " = \'" + value + "\'");
      }
      catch (Exception ex)
      { MessageBox.Show(ex.Message); }
        
 }

我这样调用这个方法:

代码语言:javascript
复制
await UpdateElementAsync("DIV_ID", "innerHTML", content);

content是HTMLTextWriter生成的字符串

更新:

innerHTML不喜欢换行符(\r\n)

innerHTML更新起作用:<button> test </button>

<button> test </button>\r\n:innerHTML更新不起作用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-08 20:33:58

我想通了!

问题是我用HTMLTextWriter呈现内容,这会生成新的行……ExecuteScriptAsync方法不知道如何解释\r\n。我的解决方案是将HTMLTextWriterNewLine属性设置为string.Empty

票数 1
EN

Stack Overflow用户

发布于 2021-04-08 04:17:54

好的,如果你对忽略新行感到满意,那么你的评论就会起作用。但是,如果您更喜欢在html中使用换行符,这也是可能的。

这里发生的事情有点“迷失在翻译中”。您在C#中构建一个字符串,然后将其传输到javascript。Javascript不喜欢在文字字符串中间换行符。这就是它失败的原因。

解决方案非常简单,只需将literal换行符(只有一个转义)替换为两个转义字符即可。将此行添加到ExecuteScriptAsync调用的正上方

代码语言:javascript
复制
value= value.Replace("\t", "\\t").Replace("\r", "\\r").Replace("\n", "\\n");

现在javascript接受换行符,您将在html中获得换行符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66991516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档