2016-08-27 14 views
0

私はこれをかなり長い間行ってきました。どこにでも掘り下げてしまいました。解決策は簡単です:クロムブラウザにいくつかのjavascriptコードを注入して、要素が表示されるのを待ちます(ブラウザは既に読み込みを完了し、要素を待たずに、私の.netコードは、 )、次に進みます。CefSharp要素が表示されるのを待つJavascriptがトリガしないイベントを発生させる

herehereの設定例(コンストラクタ参照)に従っています。

しかし、raiseイベントは、私がそうしなければならないと思ったように発砲していません。これはおそらく私のjavascriptコードに起因する - または私は別の場所で何かを逃した可能性があります。ここで

がjsのコードです:

private void InjectJsWait(string eventName, string selector, int time, string eventStage) 
    { 
     string script = @"function waitForElementToDisplay(##SELECTOR##, ##TIME##) { 
            if(document.querySelector(##SELECTOR##)!=null) { 
             window.boundEvent.raiseEvent('##EVENTNAME##', {eventStage: ##STAGE##}); 
             return; 
            } 
            else { 
             setTimeout(function() { 
              waitForElementToDisplay(##SELECTOR##, ##TIME##); 
             }, ##TIME##); 
            } 
           }"; 

     script = Regex.Replace(script, "##SELECTOR##", selector); 
     script = Regex.Replace(script, "##TIME##", time.ToString()); 
     script = Regex.Replace(script, "##EVENTNAME##", eventName); 
     script = Regex.Replace(script, "##STAGE##", eventStage); 

     browser.ExecuteScriptAsync(script); 
    } 

任意の助けいただければ幸いです。

+0

MutationObserverを使用したことはありますか?また、https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#when-can-i-start-executing-javascript – amaitland

+0

を読んだことを確認してください。ええと、私は、LoadingStateChangedイベント後にJSを注入しています!IsLoadingテストに合格しました。私はMutationObserverについてたくさん読んだことがありますが、私はそれについて私の頭を包んでいるようには見えません。 –

+0

私はmozillaの例でスクリプトがどのように書かれているのか分かります。 しかし、私はまだこのスクリプトをboundObjectにバインドし、要素が最終的にそこにあるかどうかを確認するためにC#でイベントを発生させる必要があります。私はこれを試して、MutationObserverで作業できるかどうかを見ていきます。 –

答えて

0

MutationObserverを使用するとこれを行うことができるはずです。

観測された変更をチェックして、必要なものを除外するだけです。イベントが発生したかどうか、または要素が追加されたかどうかは推測できません。

Chrome 18+または26+が動作する必要があることを覚えておいてください。

+0

はい、私はそれが行く方法であるかどうか疑問に思っていました。私は今それを深く見ている。 –

+0

したがって、BindingObjectクラスを介してC#にデータを戻すために、要素が最後にページにあるときにイベントを発生させる必要があります。私は今これをテストしています。ありがとう、ルアン。 :) –

関連する問題