From: <rb...@us...> - 2017-10-03 15:05:41
|
Revision: 14852 http://sourceforge.net/p/htmlunit/code/14852 Author: rbri Date: 2017-10-03 15:05:38 +0000 (Tue, 03 Oct 2017) Log Message: ----------- writing to an iFrame triggers the onload event now for chrome also Modified Paths: -------------- trunk/htmlunit/src/changes/changes.xml trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement3Test.java Modified: trunk/htmlunit/src/changes/changes.xml =================================================================== --- trunk/htmlunit/src/changes/changes.xml 2017-10-03 15:03:51 UTC (rev 14851) +++ trunk/htmlunit/src/changes/changes.xml 2017-10-03 15:05:38 UTC (rev 14852) @@ -9,6 +9,9 @@ <body> <release version="2.28" date="???" description="Bugfixes, Chrome 61"> <action type="fix" dev="rbri"> + JavaScript: writing to an iFrame triggers the onload event now for chrome also + </action> + <action type="fix" dev="rbri"> JavaScript: navigator.productSub now returns the same value as simulated browsers </action> <action type="fix" dev="rbri"> Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2017-10-03 15:03:51 UTC (rev 14851) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLDocument.java 2017-10-03 15:05:38 UTC (rev 14852) @@ -598,6 +598,12 @@ final WebClient webClient = page.getWebClient(); final WebWindow window = page.getEnclosingWindow(); + // reset isAttachedToPageDuringOnload_ to trigger the onload event for chrome also + if (window instanceof FrameWindow) { + final BaseFrameElement frame = ((FrameWindow) window).getFrameElement(); + final HTMLIFrameElement iFrameElement = (HTMLIFrameElement) frame.getScriptableObject(); + iFrameElement.onRefresh(); + } webClient.loadWebResponseInto(webResponse, window); } } Modified: trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java =================================================================== --- trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java 2017-10-03 15:03:51 UTC (rev 14851) +++ trunk/htmlunit/src/main/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement.java 2017-10-03 15:05:38 UTC (rev 14852) @@ -201,7 +201,8 @@ */ @Override public ScriptResult executeEventLocally(final Event event) { - if (!isAttachedToPageDuringOnload_ || getBrowserVersion().hasFeature(JS_IFRAME_ALWAYS_EXECUTE_ONLOAD)) { + if (Event.TYPE_LOAD != event.getType() + || !isAttachedToPageDuringOnload_ || getBrowserVersion().hasFeature(JS_IFRAME_ALWAYS_EXECUTE_ONLOAD)) { return super.executeEventLocally(event); } return null; Modified: trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement3Test.java =================================================================== --- trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement3Test.java 2017-10-03 15:03:51 UTC (rev 14851) +++ trunk/htmlunit/src/test/java/com/gargoylesoftware/htmlunit/javascript/host/html/HTMLIFrameElement3Test.java 2017-10-03 15:05:38 UTC (rev 14852) @@ -566,6 +566,34 @@ * @throws Exception if the test fails */ @Test + @Alerts("iframe onload") + public void writeTriggersOnload() throws Exception { + final String html + = "<!DOCTYPE html>\n" + + "<html><head><title>First</title><script>\n" + + "function test() {\n" + + " var iframe = document.createElement('iframe');\n" + + " var content = 'something';\n" + + " document.body.appendChild(iframe);\n" + + + " iframe.onload = function() {alert('iframe onload')};\n" + + " iframe.contentWindow.document.open('text/html', 'replace');\n" + + " iframe.contentWindow.document.write(content);\n" + + " iframe.contentWindow.document.close();\n" + + "}\n</script></head>\n" + + "<body>\n" + + " <button type='button' id='clickme' onClick='test();'>Click me</a>\n" + + "</body></html>"; + + final WebDriver driver = loadPage2(html); + driver.findElement(By.id("clickme")).click(); + verifyAlerts(driver, getExpectedAlerts()); + } + + /** + * @throws Exception if the test fails + */ + @Test @Alerts({"localhost", "localhost", "localhost", "localhost", "true", "true", "true"}) public void domain() throws Exception { |