diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
index 7c402b2..9d3b1c6 100644
--- a/dlls/mshtml/nsio.c
+++ b/dlls/mshtml/nsio.c
@@ -2165,10 +2165,26 @@ static nsresult NSAPI nsIOService_NewChannelFromURI(nsIIOService *iface, nsIURI
nsIChannel *channel = NULL;
nsChannel *ret;
nsIWineURI *wine_uri;
+ nsACString schema_str;
+ const char *schema;
+ BOOL b;
nsresult nsres;
TRACE("(%p %p)\n", aURI, _retval);
+ /*
+ * Our wrapped nsChannel object doesn't work for Flash, so we use URI heuristic
+ * and return necko object for *.swf channels.
+ */
+ nsACString_Init(&schema_str, NULL);
+ nsIURI_GetScheme(aURI, &schema_str);
+ nsACString_GetData(&schema_str, &schema);
+ b = !strstr(schema, ".swf");
+ nsACString_Finish(&schema_str);
+
+ if(b)
+ return nsIIOService_NewChannelFromURI(nsio, aURI, _retval);
+
nsres = nsIIOService_NewChannelFromURI(nsio, aURI, &channel);
if(NS_FAILED(nsres) && nsres != NS_ERROR_UNKNOWN_PROTOCOL) {
WARN("NewChannelFromURI failed: %08x\n", nsres);