diff --git a/src/main/java/org/htmlunit/html/HtmlPage.java b/src/main/java/org/htmlunit/html/HtmlPage.java index 1615e3a927..afdd4c480b 100644 --- a/src/main/java/org/htmlunit/html/HtmlPage.java +++ b/src/main/java/org/htmlunit/html/HtmlPage.java @@ -260,6 +260,8 @@ public void initialize() throws IOException, FailingHttpStatusCodeException { executeEventHandlersIfNeeded(Event.TYPE_READY_STATE_CHANGE); } + executePostponedScriptsIfNeeded(); + executeDeferredScriptsIfNeeded(); executeEventHandlersIfNeeded(Event.TYPE_DOM_DOCUMENT_LOADED); @@ -1477,6 +1479,13 @@ private String getRefreshStringOrNull() { return getWebResponse().getResponseHeaderValue("Refresh"); } + private void executePostponedScriptsIfNeeded() { + if (!getWebClient().isJavaScriptEnabled()) { + return; + } + getWebClient().getJavaScriptEngine().processPostponedActions(); + } + /** * Executes any deferred scripts, if necessary. */ diff --git a/src/test/java/org/htmlunit/html/HtmlPageTest.java b/src/test/java/org/htmlunit/html/HtmlPageTest.java index 571921bf8e..28d6f82c54 100644 --- a/src/test/java/org/htmlunit/html/HtmlPageTest.java +++ b/src/test/java/org/htmlunit/html/HtmlPageTest.java @@ -1973,4 +1973,25 @@ public void getBaseUrl() throws Exception { page = loadPage(getBrowserVersion(), html, null, new URL(URL_FIRST + path)); assertEquals(URL_FIRST.toExternalForm() + path, page.getBaseURL().toExternalForm()); } + + /** + * @throws Exception if an error occurs + */ + @Test + public void asyncScriptExecutedWithoutEventHandlers() throws Exception { + final String html = DOCTYPE_HTML + + "
\n" + + "\n" + + ""; + + final WebClient client = getWebClient(); + final MockWebConnection webConnection = new MockWebConnection(); + webConnection.setDefaultResponse(html); + webConnection.setResponse(new URL(URL_FIRST, "async.js"), + "document.title = 'async-executed';", "text/javascript"); + client.setWebConnection(webConnection); + + final HtmlPage page = client.getPage(URL_FIRST); + assertEquals("async-executed", page.getTitleText()); + } }