diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 7b6bb787a88..547f2581f20 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -86,6 +86,33 @@ static BOOL ensure_uri(nsWineURI *This)
return TRUE;
}
+static IUri *get_uri_nofrag(IUri *uri)
+{
+ IUriBuilder *uri_builder;
+ IUri *ret;
+ BOOL b;
+ HRESULT hres;
+
+ hres = IUri_HasProperty(uri, Uri_PROPERTY_FRAGMENT, &b);
+ if(SUCCEEDED(hres) && !b) {
+ IUri_AddRef(uri);
+ return uri;
+ }
+
+ hres = CreateIUriBuilder(uri, 0, 0, &uri_builder);
+ if(FAILED(hres))
+ return NULL;
+
+ hres = IUriBuilder_RemoveProperties(uri_builder, Uri_HAS_FRAGMENT);
+ if(SUCCEEDED(hres))
+ hres = IUriBuilder_CreateUriSimple(uri_builder, 0, 0, &ret);
+ IUriBuilder_Release(uri_builder);
+ if(FAILED(hres))
+ return NULL;
+
+ return ret;
+}
+
static nsresult create_nsuri(IUri*,nsIURI*,HTMLWindow*,NSContainer*,nsWineURI**);
static const char *debugstr_nsacstr(const nsACString *nsstr)
@@ -2232,13 +2259,6 @@ static nsresult NSAPI nsURI_Clone(nsIURL *iface, nsIURI **_retval)
return NS_OK;
}
-static nsresult NSAPI nsURI_CloneIgnoreRef(nsIURL *iface, nsIURI **_retval)
-{
- nsWineURI *This = impl_from_nsIURL(iface);
- FIXME("(%p)->(%p)\n", This, _retval);
- return nsIURL_Clone(&This->nsIURL_iface, _retval);
-}
-
static nsresult NSAPI nsURI_Resolve(nsIURL *iface, const nsACString *aRelativePath,
nsACString *_retval)
{
@@ -2314,6 +2334,33 @@ static nsresult NSAPI nsURI_GetOriginCharset(nsIURL *iface, nsACString *aOriginC
return NS_ERROR_NOT_IMPLEMENTED;
}
+static nsresult NSAPI nsURI_CloneIgnoreRef(nsIURL *iface, nsIURI **_retval)
+{
+ nsWineURI *This = impl_from_nsIURL(iface);
+ nsWineURI *wine_uri;
+ IUri *uri;
+ nsresult nsres;
+
+ TRACE("(%p)->(%p)\n", This, _retval);
+
+ if(!ensure_uri(This))
+ return NS_ERROR_UNEXPECTED;
+
+ uri = get_uri_nofrag(This->uri);
+ if(!uri)
+ return NS_ERROR_FAILURE;
+
+ nsres = create_nsuri(uri, NULL, This->window_ref ? This->window_ref->window : NULL, This->container, &wine_uri);
+ IUri_Release(uri);
+ if(NS_FAILED(nsres)) {
+ WARN("create_nsuri failed: %08x\n", nsres);
+ return nsres;
+ }
+
+ *_retval = (nsIURI*)&wine_uri->nsIURL_iface;
+ return NS_OK;
+}
+
static nsresult NSAPI nsURI_GetSpecIgnoringRef(nsIURL *iface, nsACString *aSpecIgnoringRef)
{
nsWineURI *This = impl_from_nsIURL(iface);