diff --git a/jstz_api/src/url/mod.rs b/jstz_api/src/url/mod.rs index cc6e2f9e5..9cea6a96c 100644 --- a/jstz_api/src/url/mod.rs +++ b/jstz_api/src/url/mod.rs @@ -12,8 +12,9 @@ mod search_params; use std::{cmp::Ordering, ops::Deref}; use boa_engine::{ - js_string, object::Object, property::Attribute, Context, JsArgs, JsError, - JsNativeError, JsObject, JsResult, JsValue, NativeFunction, + builtins::object::Object as GlobalObject, js_string, object::Object, + property::Attribute, Context, JsArgs, JsError, JsNativeError, JsObject, JsResult, + JsValue, NativeFunction, }; use boa_gc::{custom_trace, Finalize, GcRefMut, Trace}; use jstz_core::{ @@ -428,9 +429,15 @@ impl UrlClass { _args: &[JsValue], context: &mut Context<'_>, ) -> JsResult { - let url = Url::try_from_js(this)?; - - Ok(url.href().into_js(context)) + Url::try_from_js(this) + .map(|url| url.href().into_js(context)) + .or_else(|_| GlobalObject::to_string(this, _args, context)) + .or_else(|_| { + Err(JsError::from_native( + JsNativeError::typ() + .with_message("Failed to convert `URL` into js string"), + )) + }) } fn to_json(