Opened 5 years ago

Closed 5 years ago

Last modified 5 years ago

#798 closed Bug (fixed)

IE6 error when clicking on menu: flash object not destroyed properly

Reported by: matt Owned by:
Priority: major Milestone: Piwik 0.4.1
Component: UI - UX (AngularJS, twig, less) Keywords:
Cc: Sensitive:

Description

From Marc Trudel by email

the solution came to me. Here is the patch, its basically 3 lines - the part in sectionLoaded is just be reindenting :D

root@mushin:/var/www/dev.mu-shin.ca/piwik/plugins/CoreHome# svn diff ./templates/broadcast.js
Index: templates/broadcast.js
===================================================================
--- templates/broadcast.js    (revision 1200)
+++ templates/broadcast.js    (working copy)
@@ -158,15 +158,20 @@
     $('#loadingPiwik').show();
     $('#content').hide();
 
+    // OFC ofc_resize call fix - remove the object before the container
+    $("object").each(function(){
+        $(this).remove();
+    });
+
     broadcast.lastUrlRequested = urlAjax;
 
     function sectionLoaded(content)
     {
         if(urlAjax == broadcast.lastUrlRequested) {
-        $('#content').html( content ).show();
-        $('#loadingPiwik').hide();
-        broadcast.lastUrlRequested = null;
-    }
+            $('#content').html( content ).show();
+            $('#loadingPiwik').hide();
+            broadcast.lastUrlRequested = null;
+        }
     }
     piwikMenu.activateMenu(
         broadcast.getParamValue('module', urlAjax),

Basically, here's why you had a problem - ofc implements an ExternalInterface so that if you resize the flash container, it can call a javascript function. This is good for, say, a flash with 100% width and a jquery ui resizeable container. Problem comes when you destroy the container: that triggers the resize function (beccause the container "changes size"), but when it comes back to make the externalinterface js call, the internal script does a document.getElementById with the flash object id... and returns null.

So to avoid the resize call, you must destroy implicitly the object first, and the container later.

Change History (5)

comment:1 Changed 5 years ago by mt

Just a note - this is also a bug in other versions of IE - IE7 and IE8 are also having this problem.

Also, I know the fix should have been reduced to

$("object").remove();

but... well, that could go in too :).

comment:2 Changed 5 years ago by vipsoft (robocoder)

Confirmed that this fixes the "'null' is null or not an object" error. Thanks.

comment:3 Changed 5 years ago by vipsoft (robocoder)

  • Resolution set to fixed
  • Status changed from new to closed

(In [1235]) Fixes #798 - null is null or not an object error

comment:4 Changed 5 years ago by spomoni

comment:5 Changed 5 years ago by spomoni

Note: See TracTickets for help on using tickets.