web-dev-qa-db-fra.com

SCRIPT438: L'objet ne prend pas en charge la propriété ou la méthode IE

J'ai une option dans mon application où les utilisateurs peuvent désactiver leurs profils. Seul l'administrateur peut les réactiver.

J'ai une classe ActivateProfile avec deux méthodes

  • userExist(userName) qui vérifie si l'utilisateur avec ce nom d'utilisateur existe et si son profil est désactivé
  • et activateAccountByUser(userName) qui réactive le profil de l'utilisateur

J'appelle une fonction JavaScript sur l'événement click d'un bouton de type d'entrée. Ce code fonctionne bien sur Chrome et Mozilla, mais sur Internet Explorer, j'obtiens cette erreur:

SCRIPT438: L'objet ne prend pas en charge la propriété ou la méthode userExist

function activateProf() {        
   var userName=document.getElementById("userName").value;

   if (userName == "") {
      alert("Полето е задолжително");
   } else {
      alert(userName + "1");
      ActivateProfile.userExist(userName, { callback:function(exist) {
         if (userName) {
            ActivateProfile.activateAccountByUser(userName);
            alert("User is activated");
         } else {
            alert("User does not exist");
         }
      }});
   }
}

Voici le code pour Activer la classe de profil

 public void activateAccountByUser(String userName) {
    try {
        Connection c = DBComm.getInstance().getConnection();
        Statement s = c.createStatement();
        ResultSet set = s.executeQuery("select * from accounts where userName = '" + userName + "' and isauthorized='2'");

        if (set.next()) {
            Statement st = c.createStatement();
            st.executeUpdate("update accounts set isauthorized='1' where userName='" + userName                    + "' and isauthorized='2'");
        }
        s.close();
        c.close();
    } catch (Exception ex) {
        Java.util.logging.Logger.getLogger(ActivateProfile.class.getName()).log(Level.SEVERE, null, ex);
    }
}

public boolean userExist(String userName) throws SQLException {
    //true exist
    //false does not exist
    boolean existEmbg = false;

    try {
        Connection c = DBComm.getInstance().getConnection();
        Statement s = c.createStatement();
        ResultSet set = s.executeQuery("select * from accounts where userName = '" + userName + "' and isauthorized='2'");

        if (set.next()) {
            existEmbg = true;
        } else {
            existEmbg = false;
        }
        s.close();
        c.close();
    } catch (Exception ex) {
       Java.util.logging.Logger.getLogger(ActivateProfile.class.getName()).log(Level.SEVERE, null, ex);
    }
    return existEmbg;
}
55
vikifor

Après quelques jours de recherche sur Internet, j'ai constaté que cette erreur se produisait généralement lorsqu'un identifiant d'élément html avait le même identifiant que certaines variables de la fonction javascript. Après avoir changé le nom de l'un d'eux, mon code fonctionnait bien.

85
vikifor

Il s'agit d'un problème courant dans les applications Web qui utilisent un espacement de nom JavaScript. Lorsque tel est le cas, le problème réside 99,9% du temps dans l'incapacité d'IE à lier les méthodes de l'espace de noms actuel au mot clé "this". 

Par exemple, si j'ai l'espace de noms JS "StackOverflow" avec la méthode "isAwesome". Normalement, si vous êtes dans l'espace de noms "StackOverflow", vous pouvez appeler la méthode "isAwesome" avec la syntaxe suivante:

this.isAwesome();

Chrome, Firefox et Opera accepteront volontiers cette syntaxe. IE d'autre part, ne sera pas. Ainsi, le pari le plus sûr lors de l'utilisation de l'espacement de noms JS est de toujours préfixer avec l'espace de noms réel. À la:

StackOverflow.isAwesome();
8
pimbrouwers

J'ai ajouté var pour toutes les variables dans le javascript correspondant ..___. Cela a résolu le problème dans IE.

Code précédent

billableStatus = 1 ;
var classStr = $(this).attr("id").split("_");  
date = currentWeekDates[classStr[2]]; // Required    

activityNameId = "initialRows_" + classStr[1] + "_projectActivityName";
activityId = $("#"+activityNameId).val();        

var projectNameId = "initialRows_" + classStr[1] + "_projectName" ;
projectName = $("#"+projectNameId).val();        

var timeshitEntryId = "initialRows_"+classStr[1]+"_"+classStr[2];     
timeshitEntry = $("#"+timeshitEntryId).val();   

Nouveau code

var billableStatus = 1 ;
var classStr = $(this).attr("id").split("_");  
var date = currentWeekDates[classStr[2]]; // Required    

var activityNameId = "initialRows_" + classStr[1] + "_projectActivityName";
var activityId = $("#"+activityNameId).val();        

var projectNameId = "initialRows_" + classStr[1] + "_projectName" ;
var projectName = $("#"+projectNameId).val();        

var timeshitEntryId = "initialRows_"+classStr[1]+"_"+classStr[2];     
var timeshitEntry = $("#"+timeshitEntryId).val();   
5
Suman-PHP4U

Mon problème était d'avoir type="application/javascript" sur la balise <script> pour jQuery. IE8 n'aime pas ça! Si votre page Web est en HTML5, vous n'avez même pas besoin de déclarer le type, sinon utilisez plutôt type="text/javascript".

1
Lynxy

Dans mon cas, j'avais un code comme celui-ci:

function.call(context, arg);

J'ai un message d'erreur sous IE 

TypeError: l'objet ne prend pas en charge la propriété ou la méthode 'erreur'

Dans le corps de 'fonction' j'avais "console.error" et il devient cet objet console indéfini lorsque votre console est fermée. J'ai corrigé cela en vérifiant si console et console.error sont définis

1
osoitza

Implémentez "use strict" dans toutes les balises de script pour rechercher les incohérences et réparer les variables non traitées!

0
Alex

Nous avons pu résoudre ce problème en ajoutant dans le fichier polyfill Object.Assign les fichiers importés et en renvoyant l'erreur. Nous en ferions la plus grande importation, de cette façon, il serait disponible pour l'autre code appelé dans la pile. 

import "mdn-polyfills/Object.assign";

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill

0
Justin E. Samuels

J'ai oublié d'utiliser var sur ma variable d'item

Code incorrect: 

var itemCreateInfo = new SP.ListItemCreationInformation();
item = list.addItem(itemCreateInfo); 
item.set_item('Title', 'Haytham - Oil Eng'); 

Code correct: 

var itemCreateInfo = new SP.ListItemCreationInformation();
var item = list.addItem(itemCreateInfo);  
item.set_item('Title', 'Haytham - Oil Eng');
0
Jamil Haddadin