diff --git a/packages/runtime-dom/__tests__/patchProps.spec.ts b/packages/runtime-dom/__tests__/patchProps.spec.ts
index ce30f91162f..c01967145c2 100644
--- a/packages/runtime-dom/__tests__/patchProps.spec.ts
+++ b/packages/runtime-dom/__tests__/patchProps.spec.ts
@@ -75,4 +75,37 @@ describe('runtime-dom: props patching', () => {
expect(root.innerHTML).toBe(`
bar
`)
expect(fn).toHaveBeenCalled()
})
+
+ // #1049
+ test('set domProps where string is not accepted', () => {
+ const realCreateElement = document.createElement.bind(document)
+ const spyCreateElement = jest
+ .spyOn(document, 'createElement')
+ .mockImplementation(tagName => {
+ const el = realCreateElement(tagName)
+ let srcObject: any = undefined
+ Object.defineProperty(el, 'srcObject', {
+ enumerable: true,
+ set(v) {
+ if (typeof v === 'string') {
+ throw new TypeError(
+ `Failed to set the 'srcObject' property on 'HTMLMediaElement'`
+ )
+ }
+ srcObject = v
+ },
+ get() {
+ return srcObject
+ }
+ })
+ return el
+ })
+
+ const el = document.createElement('video')
+
+ patchProp(el, 'srcObject', undefined, null)
+
+ expect(el.srcObject).toBeNull()
+ spyCreateElement.mockRestore()
+ })
})
diff --git a/packages/runtime-dom/src/modules/props.ts b/packages/runtime-dom/src/modules/props.ts
index 0b36578eb88..c27aa8db4a0 100644
--- a/packages/runtime-dom/src/modules/props.ts
+++ b/packages/runtime-dom/src/modules/props.ts
@@ -32,6 +32,11 @@ export function patchDOMProp(
// e.g.