私はこれをかなり長い間行ってきました。どこにでも掘り下げてしまいました。解決策は簡単です:クロムブラウザにいくつかのjavascriptコードを注入して、要素が表示されるのを待ちます(ブラウザは既に読み込みを完了し、要素を待たずに、私の.netコードは、 )、次に進みます。CefSharp要素が表示されるのを待つJavascriptがトリガしないイベントを発生させる
hereとhereの設定例(コンストラクタ参照)に従っています。
しかし、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);
}
任意の助けいただければ幸いです。
MutationObserverを使用したことはありますか?また、https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#when-can-i-start-executing-javascript – amaitland
を読んだことを確認してください。ええと、私は、LoadingStateChangedイベント後にJSを注入しています!IsLoadingテストに合格しました。私はMutationObserverについてたくさん読んだことがありますが、私はそれについて私の頭を包んでいるようには見えません。 –
私はmozillaの例でスクリプトがどのように書かれているのか分かります。 しかし、私はまだこのスクリプトをboundObjectにバインドし、要素が最終的にそこにあるかどうかを確認するためにC#でイベントを発生させる必要があります。私はこれを試して、MutationObserverで作業できるかどうかを見ていきます。 –