是否可以在WebView2中使用ExecuteScriptAsync方法设置/更新innerHTML,或者是否有其他方法可以绕过它?
我创建了以下方法来更新DOM。除了innerHTML之外,它工作得很好
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); }
}我这样调用这个方法:
await UpdateElementAsync("DIV_ID", "innerHTML", content);content是HTMLTextWriter生成的字符串
更新:
innerHTML不喜欢换行符(\r\n)
innerHTML更新起作用:<button> test </button>
<button> test </button>\r\n:innerHTML更新不起作用
发布于 2021-04-08 20:33:58
我想通了!
问题是我用HTMLTextWriter呈现内容,这会生成新的行……ExecuteScriptAsync方法不知道如何解释\r\n。我的解决方案是将HTMLTextWriter的NewLine属性设置为string.Empty。
发布于 2021-04-08 04:17:54
好的,如果你对忽略新行感到满意,那么你的评论就会起作用。但是,如果您更喜欢在html中使用换行符,这也是可能的。
这里发生的事情有点“迷失在翻译中”。您在C#中构建一个字符串,然后将其传输到javascript。Javascript不喜欢在文字字符串中间换行符。这就是它失败的原因。
解决方案非常简单,只需将literal换行符(只有一个转义)替换为两个转义字符即可。将此行添加到ExecuteScriptAsync调用的正上方
value= value.Replace("\t", "\\t").Replace("\r", "\\r").Replace("\n", "\\n");现在javascript接受换行符,您将在html中获得换行符。
https://stackoverflow.com/questions/66991516
复制相似问题