diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs
index 8fb0f2c4be5..e38ab5ff523 100644
--- a/components/script/dom/htmlelement.rs
+++ b/components/script/dom/htmlelement.rs
@@ -94,7 +94,8 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> {
let win = window_from_node(self).root();
win.GetOnload()
} else {
- None
+ let target: JSRef = EventTargetCast::from_ref(self);
+ target.get_event_handler_common("load")
}
}
@@ -102,6 +103,9 @@ impl<'a> HTMLElementMethods for JSRef<'a, HTMLElement> {
if self.is_body_or_frameset() {
let win = window_from_node(self).root();
win.SetOnload(listener)
+ } else {
+ let target: JSRef = EventTargetCast::from_ref(self);
+ target.set_event_handler_common("load", listener)
}
}
diff --git a/components/script/dom/htmlscriptelement.rs b/components/script/dom/htmlscriptelement.rs
index 9432768e816..3883d83f562 100644
--- a/components/script/dom/htmlscriptelement.rs
+++ b/components/script/dom/htmlscriptelement.rs
@@ -12,11 +12,14 @@ use dom::bindings::codegen::Bindings::HTMLScriptElementBinding::HTMLScriptElemen
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
use dom::bindings::codegen::InheritTypes::{HTMLScriptElementDerived, HTMLScriptElementCast};
use dom::bindings::codegen::InheritTypes::{ElementCast, HTMLElementCast, NodeCast};
+use dom::bindings::codegen::InheritTypes::EventTargetCast;
+use dom::bindings::global::GlobalRef;
use dom::bindings::js::{JSRef, Temporary, OptionalRootable};
use dom::bindings::utils::{Reflectable, Reflector};
use dom::document::Document;
use dom::element::{ElementTypeId, Element, AttributeHandlers, ElementCreator};
-use dom::eventtarget::{EventTarget, EventTargetTypeId};
+use dom::eventtarget::{EventTarget, EventTargetTypeId, EventTargetHelpers};
+use dom::event::{Event, EventBubbles, EventCancelable, EventHelpers};
use dom::htmlelement::HTMLElement;
use dom::node::{Node, NodeHelpers, NodeTypeId, window_from_node, CloneChildrenFlag};
use dom::virtualmethods::VirtualMethods;
@@ -206,6 +209,14 @@ impl<'a> HTMLScriptElementHelpers for JSRef<'a, HTMLScriptElement> {
};
window.evaluate_script_with_result(source.as_slice(), url.serialize().as_slice());
+
+ let event = Event::new(GlobalRef::Window(*window),
+ "load".to_string(),
+ EventBubbles::DoesNotBubble,
+ EventCancelable::NotCancelable).root();
+ event.set_trusted(true);
+ let target: JSRef = EventTargetCast::from_ref(self);
+ target.dispatch_event(*event);
}
fn is_javascript(self) -> bool {
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini
deleted file mode 100644
index 27864dc14bd..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onload-string.html.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[script-onload-string.html]
- type: testharness
- [Setting onload to a string should convert to null.]
- expected: FAIL
-