2010-11-14 4 views
1


J'ai une page simple avec un swfobject incorporé dessus.
On dirait que IE a des problèmes avec la propriété 'filters' sur l'objet incorporé.
Ma page de test ressemble que:IE lance 'Erreur non spécifiée' lors du rechargement d'une page avec swfobject incorporé

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>test</title> 
    <script type="text/javascript" src="../scripts/swfobject.js"></script> 
    <script type="text/javascript" src="../scripts/jquery-1.3.2.min.js"></script> 
    <script type="text/javascript"> 
     var url = ""; 
     $(function() 
     { 
      var flashvars = {}; 
      var parameters = {}; 
      var attributes = {}; 
      flashvars["data-file"] = url; 
      parameters.wmode = "transparent";  
      swfobject.embedSWF("test.swf", "graph1", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, parameters, attributes); 
     }); 
    </script> 
    <style type="text/css"> 
     #graph1 
     { 
      margin:30px; 
      height: 400px; 
      width: 600px; 
     } 
    </style> 
</head> 
<body> 
    <div id="graph1"></div> 
</body> 
</html> 

Note: le fichier test.swf est le paquet swfobject du download page.

maintenant quand je recharger la page, il jette une «erreur non spécifiée» sur IE, mais pas sur firefox dans lequel la propriété filters est définie sur undefined.

le code qui semble provoquer l'erreur est dans swfobject.js v2.2 (lignes 494-504):

/*! SWFObject v2.2 <http://code.google.com/p/swfobject/> 
    is released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/ 


function removeObjectInIE(id) { 
     var obj = getElementById(id); 
     if (obj) { 
      for (var i in obj) { 
       if (typeof obj[i] == "function") { 
        obj[i] = null; // when (i == 'filters') we get the error 
       } 
      } 
      obj.parentNode.removeChild(obj); 
     } 
    } 

Est-ce que quelqu'un a une idée pourquoi cela pourrait se produire?

Répondre

0

Je n'ai pas une idée, pourquoi cela se produit, mais vous pouvez essayer de le réparer avec un try/catch

try{obj[i] = null;}catch(e){} 

Cela devrait éviter les messages d'erreur.

+0

ma solution actuelle est dans le même sens. Je ne l'aime pas. merci quand même :) – kfiroo

+0

Oui, bien sûr, c'est plus de cosmétiques au lieu d'un vrai bugfix. –

2

Deux choses qui ont attiré mon attention immédiatement:

Première: Vous enveloppées votre fonction anonyme (contenant le code de SWFObject) dans un « dollar » jQuery déclaration. La fonction dollar jQuery "accepte une chaîne contenant un sélecteur CSS qui est ensuite utilisé pour faire correspondre un ensemble d'éléments."

Votre fonction ne renvoie rien, ce qui provoque une erreur JavaScript lorsque jQuery essaie d'utiliser une référence NULL comme sélecteur CSS. swfobject.embedSWF ne renvoie pas non plus de valeur, il est donc préférable de supprimer la fonction jQuery dollar de votre code.

Si vous ne vouliez que votre code à exécuter dans une fonction anonyme, laissez tomber le $ et ajoutez un appel de fonction à la fin:

(function() 
    { 
     var flashvars = {}; 
     var parameters = {}; 
     var attributes = {}; 
     flashvars["data-file"] = url; 
     parameters.wmode = "transparent";  
     swfobject.embedSWF("test.swf", "graph1", "100%", "100%", "9.0.0", "expressInstall.swf", flashvars, parameters, attributes); 
})(); 

Deuxième: vous passez un FlashVars nom de la variable qui contient une trait d'union, qui est illégal dans JavaScript et ActionScript.

Enfin, removeObjectInIE (une sous-fonction de swfobject.removeSWF) a été complètement testé dans IE 6, 7 et 8. Comme IE9 est toujours en version bêta, swfobject ne le supporte pas encore officiellement. Cependant, nous n'anticipons aucun problème. Je suggère d'essayer les modifications que je mentionne ci-dessus et de voir si cela éclaircit votre problème.

+0

merci pour votre commentaire. Je vais vérifier si le retrait du signe dollar fonctionne et vous le faire savoir. s'il vous plaît noter que cette page est juste une page de test simple que j'ai créé en essayant de traquer la source de ce bug mystérieux. sur mon site principal, l'intégration ne se fait pas dans la méthode docReady, ce qui me fait penser que ce n'est pas la cause du problème. Quant au trait d'union illégal, il est requis par le composant que nous utilisons, open-flash-chart, ce qui me fait penser qu'il ne devrait pas obliger le navigateur à définir le prop des filtres à une exception.encore une fois, merci, je reviendrai avec des réponses bientôt. – kfiroo

+0

Je vois. Je ne suis pas sûr de la façon dont vous avez configuré votre page, mais juste pour info FYI swfobject.embedSWF a une fonction automatique 'domready', donc vous n'avez pas besoin d'utiliser $ (document) .ready de jQuery. L'utilisation de $ (document) .ready de jQuery avec swfobject.embedSWF ne provoquera aucune erreur, mais sera redondante. – pipwerks

+0

+1 L'appel de fonction et ne pas toujours encapsuler une fonction dans le 'dollar' sont d'excellents conseils – amelvin

Questions connexes