2014-02-19 125 views
0

我試圖處理似乎是自定義js事件。我有一個表通過AJAX請求進行更新,並且包含在iframe中的一個框架中。我必須檢測該表何時填充數據。在WebBrowser控件中處理自定義Javascript事件C#

當我在螢火蟲中檢查表時,它顯示一個稱爲溢出的事件運行。但是我無法在任何地方找到任何有關它的信息,所以我認爲它是自定義的或者不受支持的,至少不是我使用的WebBrowser控件。

這段JavaScript代碼會檢測到它:

(function(){ 
    function log(e) { 
     console.log(e); 
    } 
    window.frames[0].frames[1].document.body.addEventListener("overflow", log);  
})(); 

不過,我想,以避免使用JS把C#調用,除非絕對必要,我怎麼能處理溢出JS事件在C#中使用Web瀏覽器?

+0

當你說「發生溢流事件」時,你究竟是什麼意思? –

+0

我的意思是說,處理事件(編輯我的問題)。所以我需要點擊表格中的鏈接。 –

+0

我仍然不確定你的意思,'日誌'功能不處理事件? –

回答

0

更新俊/ 11/2015:請查看以下

正確答案你可以看看這個:Web browser control: How to capture document events?

但是,演示了使用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事件 - 比如點擊,鼠標懸停,鼠標移動等等。因此,你最終的方法是圍繞這個限制編寫代碼。

+0

它不工作。 ; *看來你只能處理純粹的DOM事件*所以,你的答案是不適用的。而不是寫'請看下面的正確答案' - 你應該打開'這曾經工作,但不再可能'... – mschr

+0

@mschr正確的答案是,你只能鉤住dom事件。 – deostroll

+0

把它放在頂部:P – mschr