cefsharp выполнить javascript
Я хочу, чтобы выполнить JavaScript
код CefSharp
в Windows Forms, но это не работает. Код выглядит следующим образом, и не отображается. Я что-то пропустил?
var browser = new ChromiumWebBrowser("http://localhost:50056/simple.aspx");
browser.Name = "Simple Page";
browser.Dock = DockStyle.Fill;
this.Controls.Add(browser);
browser.ExecuteScriptAsync("alert('test');");
1 ответов
перед выполнением JavaScript необходимо дождаться достаточной загрузки браузера. Заманчиво начать пытаться получить доступ к DOM в OnFrameLoadStart, в то время как V8Context будет создан, и вы сможете выполнить сценарий, который DOM не закончит загрузку. Если вам нужно получить доступ к DOM в самой ранней точке, то подпишитесь на DOMContentLoaded, некоторые примеры выполнения JavaScript ниже
browser.RenderProcessMessageHandler = new RenderProcessMessageHandler();
public class RenderProcessMessageHandler : IRenderProcessMessageHandler
{
// Wait for the underlying JavaScript Context to be created. This is only called for the main frame.
// If the page has no JavaScript, no context will be created.
void IRenderProcessMessageHandler.OnContextCreated(IWebBrowser browserControl, IBrowser browser, IFrame frame)
{
const string script = "document.addEventListener('DOMContentLoaded', function(){ alert('DomLoaded'); });";
frame.ExecuteJavaScriptAsync(script);
}
}
//Wait for the page to finish loading (all resources will have been loaded, rendering is likely still happening)
browser.LoadingStateChanged += (sender, args) =>
{
//Wait for the Page to finish loading
if (args.IsLoading == false)
{
browser.ExecuteJavaScriptAsync("alert('All Resources Have Loaded');");
}
}
//Wait for the MainFrame to finish loading
browser.FrameLoadEnd += (sender, args) =>
{
//Wait for the MainFrame to finish loading
if(args.Frame.IsMain)
{
args.Frame.ExecuteJavaScriptAsync("alert('MainFrame finished loading');");
}
};