diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index 3ce09786f66..3a978b54855 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.c
@@ -583,8 +583,10 @@ static HRESULT WINAPI HTMLLocation_assign(IHTMLLocation *iface, BSTR bstr)
 static HRESULT WINAPI HTMLLocation_toString(IHTMLLocation *iface, BSTR *String)
 {
     HTMLLocation *This = impl_from_IHTMLLocation(iface);
-    FIXME("(%p)->(%p)\n", This, String);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, String);
+
+    return IHTMLLocation_get_href(&This->IHTMLLocation_iface, String);
 }
 
 static const IHTMLLocationVtbl HTMLLocationVtbl = {
diff --git a/dlls/mshtml/tests/htmllocation.c b/dlls/mshtml/tests/htmllocation.c
index d314a131c7d..8bf5517dd5b 100644
--- a/dlls/mshtml/tests/htmllocation.c
+++ b/dlls/mshtml/tests/htmllocation.c
@@ -129,6 +129,12 @@ static void test_href(IHTMLLocation *loc, const struct location_test *test)
                 "%s: expected retrieved href to be L\"%s\", was: %s\n",
                 test->name, test->href, wine_dbgstr_w(str));
     SysFreeString(str);
+
+    hres = IHTMLLocation_toString(loc, &str);
+    ok(hres == S_OK, "%s: toString failed: 0x%08x\n", test->name, hres);
+    ok(str_eq_wa(str, test->href), "%s: toString returned %s, expected %s\n",
+       test->name, wine_dbgstr_w(str), test->href);
+    SysFreeString(str);
 }
 
 static void test_protocol(IHTMLLocation *loc, const struct location_test *test)