0

我有一个 C# Windows 窗体应用程序,其中有一个 webBrowser。它访问一个 Wikia 聊天室,然后在其中找到包含聊天输出的元素。这个元素看起来像:

<div style="" id="Chat_XXXXX" class="Chat">
 <ul>
  (chat text)
 </ul>
</div>

该程序的目的是每隔一段时间检索一次聊天文本以进行记录。这很容易通过解析“Chat_XXXXX”元素的“InnerHtml”来完成。但是,当我这样做时,我还需要从窗口中清除文本(由于各种原因,我不能将文本留在窗口中)。我想我会删除元素的聊天文本部分,因为这是使用名为“chat hacks”的方便 javascript 文件完成的,用于 Wiki 聊天(此处)。或者至少,我认为它就是这样做的。如果您查看该文件中的函数“clearWindow”,您可以看到它的作用:

NodeChatController.prototype.clearWindow = function() {
  this.viewDiscussion.chatUL.html('');
  this.inlineAlert(i18n['cleared']);
}

我尝试使用以下三个字符串设置“Chat_XXXXX”的 InnerHtml(当然不是同时):

HtmlDocument document = webBrowser1.Document;
document.GetElementById("Chat_XXXXX").InnerHtml = ""
document.GetElementById("Chat_XXXXX").InnerHtml = "<ul></ul>"
document.GetElementById("Chat_XXXXX").InnerHtml = "<ul><li class=\"inline-alert\"> Window cleared. </li></ul>"

然而,尽管这些清除了窗口(并且在最后一个打印消息的情况下),聊天不再随着新消息的出现而更新。唯一的解决方法是重新加载页面,这不是一个选项,因为重新加载页面会带来大量的聊天历史记录(我试图避免这种情况)。我还尝试使用以下方法将上面提到的 javascript 导入页面:

HtmlElement head = webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptEl = webBrowser1.Document.CreateElement("script");
scriptEl.SetAttribute("type", "text/javascript");
scriptEl.SetAttribute("src", "https://db.tt/66q8UQbY");
head.AppendChild(scriptEl);

此 javascript 创建一个清除聊天窗口的按钮。该按钮可以很好地清除窗口,但同样,聊天不再更新。我知道这个按钮可以正常工作,而不会停止在“常规”浏览器(Chrome、Firefox、Opera 等)中进一步传入的聊天。我已经用过很多次了,这个脚本本身在 Wikia 社区中很受欢迎。我已经按照这里的步骤进行操作:“ WPF WebBrowser Control - position:fixed Element jumps while scrolling (Windows 8) ”让浏览器尽可能接近 Internet Explorer(?)。在更改 InnerHtml 后,我已经检查了文档的 Body 字段,以确保我的替换没有更改任何重要的内容。只是为了清楚起见,这里'

<li class="you" data-user="UserNameHere" id="entry-c812">
  ...avatars and junk...
  <span class="message">hello</span>
</li>

老实说,我不知道是什么导致聊天元素在编辑后停止更新(特别是因为它在此程序之外工作),所以我不知道要包含哪些信息。你需要什么,我都会提供。这是来自 Wikia 的生成聊天输出窗口的 javascript:chat_js2。查找“Chat_”以找到最初生成窗口的部分。我不知道该文件中输出的更新位置。

4

0 回答 0