2016-11-29 6 views
0

私のブラウザ(GeckoFX)が私のウェブページのボタンをクリックすると.NET機能を実行したいと考えています。私は、次のコードを持っている:GeckoFXの 'AddMessageEventListener'にエラーがあります

public Form1() 
{ 
    InitializeComponent(); 

    AddMessageEventListener("myFunction", ((string s) => this.showMessage(s))); 

    browser.LoadHtml 
    (
     @"<!DOCTYPE html> 
      <html><head> 
      <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8""> 
      <script type=""text/javascript""> 
       function fireEvent(name, data) 
       { 
        event = document.createEvent('MessageEvent'); 
        event.initMessageEvent(name, false, false, data, null, null, null, null); 
        document.dispatchEvent(event); 
       } 
      </script> 
      </head> 
      <body>fdsfsda 
       <input type=""button"" onclick=""fireEvent('myFunction', 'some data');"" value=""SHOW DATA"" /> 
      </body></html>" 
    ); 
} 

public void AddMessageEventListener(string eventName, Action<string> action) 
{ 
    browser.AddMessageEventListener(eventName, action); 
} 

private void showMessage(string s) 
{ 
    MessageBox.Show(s); 
} 

をしかし、そのコードを実行するときに、ライン

browser.AddMessageEventListener(eventName, action); 

は私にエラー「オブジェクトのインスタンスに設定されていないオブジェクト参照」を提供します。私はその行のすべてのオブジェクトが初期化されていることを確認したので、それは理解できません。誰かが助けて、なぜこのエラーが出てくるのか教えてもらえますか?

ありがとうございました!

+0

は、誰かが私を助けてくださいことはできますか?それは私を夢中にさせている!どうもありがとうございました!!!!!!! – jaume

+0

あなたのコードは 'AddMessageEventListener'メソッドを入力しますか? – Bartosz

答えて

0

別のアプローチを試すことができます。 browser.DomClickイベントを購読する - 何かがクリックされるたびにトリガーされます。そこから、興味のないクリックを除外して、必要な要素がクリックされたときにのみ、さらにコードを呼び出すことができます。

Browser.DomClick += browser_DomClick; 

そして

private void browser_DomClick(object sender, DomMouseEventArgs e) 
     { 
      var browser = sender as GeckoWebBrowser; 

      if (sender != null && e != null && e.Target != null) 
      { 
       if (e.Button == GeckoMouseButton.Left) 
       { 
        HandleLeftClick(e); 
       } 
       if (e.Button == GeckoMouseButton.Middle) 
       { 
        HandleMiddleClick(e); 
       } 
       if (e.Button == GeckoMouseButton.Right) 
       { 
        HandleRightClick(e); 
       } 
      } 
     } 
0

このようLoadHtmlAddMessageEventListenerを配置しようとすると:

browser.LoadHtml(@"<!DOCTYPE html>.....</html>"); 

AddMessageEventListener("myFunction", ((string s) => this.showMessage(s))); 

そして、それをあなたのLoadHtml内でこの行を変更します。

これにより10

var event = new MessageEvent(name,{'view': window, 'bubbles': false, 'cancelable': false, 'data': data}); 

のような新しいコードを見て:

public Form1() 
{ 
    InitializeComponent(); 

    browser.LoadHtml 
    (
     @"<!DOCTYPE html> 
      <html><head> 
      <meta http-equiv=""Content-Type"" content=""text/html; charset=UTF-8""> 
      <script type=""text/javascript""> 
       function fireEvent(name, data) 
       { 
        var event = new MessageEvent(name,{'view': window, 'bubbles': false, 'cancelable': false, 'data': data}); 
        document.dispatchEvent(event); 
       } 
      </script> 
      </head> 
      <body>fdsfsda 
       <input type=""button"" onclick=""fireEvent('myFunction', 'some data');"" value=""SHOW DATA"" /> 
      </body></html>" 
    ); 

    AddMessageEventListener("myFunction", ((string s) => this.showMessage(s))); 
} 

private void showMessage(string s) 
{ 
    MessageBox.Show(s); 
} 
関連する問題