2016-08-27 5 views
0

나는이 동안 꽤 오래 있었고, 어디서나 파고 들었다. 솔루션은 간단합니다 : 크롬 브라우저에 일부 자바 스크립트 코드를 삽입하여 요소가 나타날 때까지 기다립니다 (브라우저가 이미로드를 완료하고 요소를 기다리지 않고 내 .net 코드가 페이지에서 수행하려는 자동화 부분을지나칩니다).), 계속하십시오.CefSharp 엘리먼트가 나타날 때까지 대기 자바 스크립트가 트리거되지 않음 이벤트 발생

다음 예제는 herehere입니다 (생성자 참조).

그러나 raise 이벤트는 발생해야한다고 생각한 것처럼 실행되지 않습니다. 아마 내 자바 스크립트 코드 때문일 수도 있습니다. 또는 다른 곳에서 뭔가 놓친 가능성이 있습니다. 어떤 도움을 크게 감상 할 수

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); 
    } 

: 여기

는 JS 코드입니다.

+0

'MutationObserver'사용을 고려 했습니까? 또한 https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#when-can-i-start-executing-javascript – amaitland

+0

을 읽었는지 확인하십시오. 예, LoadingStateChanged 이벤트 후 JS 주입 중입니다. 해고하고 IsLoading 테스트를 통과했습니다. 나는 MutationObserver에 대해 많이 읽었지만, 나는 그 주위에 내 머리를 감싸고있는 것처럼 보일 수 없다. –

+0

모질라의 예제에서 스크립트가 어떻게 쓰여 졌는지 알 수 있습니다. 그러나이 스크립트를 boundObject에 바인딩하고 C#에서 요소가 최종적으로 있는지 확인하기 위해 이벤트를 발생시켜야합니다. 이것으로 실험 해보고 MutationObserver로 작업 할 수 있는지 알아 보겠습니다. –

답변

0

MutationObserver을 사용하면이 작업을 수행 할 수 있습니다.

관찰 된 변경 사항을 확인하고 필요한 것을 필터링하면됩니다. 이벤트가 발생했는지 또는 요소가 추가되었는지 추측 할 필요가 없습니다.

Chrome 18+ 또는 26+가 작동해야 함을 명심하십시오.

+0

예, 그게 내가 갈 길인지 궁금해했습니다. 저는 그것을 구현하는 방법에 관해서는 단서가 없습니다. 나는 지금 그것에 대해 더 깊이보고있다. –

+0

그래서이 문제는 boundObject 클래스를 통해 데이터를 C#으로 다시 전달하기 위해 요소가 마침내 페이지에있을 때 이벤트를 발생시켜야합니다. 나는 이것을 지금 시험하고있다. 고마워. :) –