[英]Handling custom Javascript events in WebBrowser Control C#
我正在嘗試處理似乎是自定義js事件的事件。 我有一個通過AJAX請求更新的表,並且包含在iframe的一個框架中。 我必須檢測該表何時填充數據。
當我檢查Firebug中的表時,它顯示了一個稱為溢出的事件正在運行。 但是我在任何地方都找不到任何有關它的東西,因此我認為它是自定義的或不被支持,至少不是我所使用的WebBrowser控件所支持的。
此javascript代碼將檢測到它:
(function(){
function log( e ) {
console.log( e );
}
window.frames[0].frames[1].document.body.addEventListener( "overflow", log );
})();
但是,除非絕對必要,否則我想避免使用js進行C#調用,如何使用Web瀏覽器處理C#中的js溢出事件?
2015年6月11日更新:請在下面查看正確的答案
您可以看一下: Web瀏覽器控件:如何捕獲文檔事件?
但這表明使用了COM加載項。 但是,從.net 4.5開始,這可以直接使用。
說這是一個小的html頁面:
<html>
<head>
<script src="http://code.jquery.com/jquery.js"></script>
<script>
$(function() {
$('input').click(function(){
alert("hello");
$(document).trigger("foo");
});
});
</script>
</head>
<body>
<input type="button" value="Trigger"/>
</body>
</html>
此頁面將觸發文檔上的自定義事件。 我正在使用python Web服務器@ localhost:4542托管此頁面。 (此處未顯示)。 您必須等待html文檔加載,然后發布,附加事件處理程序。
using System;
using System.Windows.Forms;
namespace winformWebBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
webBrowser1.Navigate("http://localhost:4542");
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
webBrowser1.Document.AttachEventHandler("foo", new EventHandler(delegate(object s, EventArgs k)
{
MessageBox.Show("foo");
}));
}
}
}
但是,如果您想自定義事件中公開的數據...? 到目前為止,我還沒有這方面的答案...但是您可以設計出多種方法來實現這一目標。 例如,將所有必要的數據放在html文檔的某個隱藏字段中……並從c#代碼中查詢出來
2015年6月11日更新:我有點記得該代碼在我第一次嘗試時就起作用了。 但是,在隨后的測試中,它每次都失敗。 看來您只能處理純DOM事件,例如單擊,鼠標懸停,鼠標移動等。因此,您的最終方法就是圍繞此限制編寫代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.