その中に webBrowser を含む C# Windows フォーム アプリケーションがあります。ウィキアのチャットルームにアクセスし、そこでチャット出力を含む要素を見つけます。この要素は次のようになります。
<div style="" id="Chat_XXXXX" class="Chat">
<ul>
(chat text)
</ul>
</div>
このプログラムの目的は、ログの目的でチャット テキストを時々取得することです。これは、「Chat_XXXXX」要素の「InnerHtml」を解析することで簡単に実行できます。ただし、これを行うときにウィンドウからテキストをクリアする必要もあります (さまざまな理由で、テキストをウィンドウに残すことはできません)。これは、Wiki チャット用の「chat hacks」という便利な JavaScript ファイルを使用して行う方法であるため、要素のチャット テキスト部分を消去するだけでよいと考えました (こちら)。または、少なくとも、それがその方法だと思います。そのファイルの「clearWindow」関数を見ると、それが何をするかがわかります。
NodeChatController.prototype.clearWindow = function() {
this.viewDiscussion.chatUL.html('');
this.inlineAlert(i18n['cleared']);
}
次の 3 つの文字列を使用して、「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_」を探して、最初にウィンドウを生成する部分を見つけます。ただし、そのファイルのどこで出力が更新されるかはわかりません。