javascript - metodo - el objeto no acepta la propiedad o el método readasbinarystring
SCRIPT438: El objeto no admite propiedad o método IE (9)
Tengo una opción en mi aplicación donde los usuarios pueden desactivar sus perfiles. Solo el administrador puede activarlos de nuevo.
Tengo una clase ActivateProfile
con dos métodos
-
userExist(userName)
que verifica si el usuario con ese userName existe y su perfil está desactivado - y
activateAccountByUser(userName)
que activa nuevamente el perfil del usuario
Llamo a una función de JavaScript en el evento click de un botón de tipo de entrada. Este código funciona bien en Chrome y Mozilla, pero en Internet Explorer me aparece este error:
SCRIPT438: El objeto no admite la propiedad o el método 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");
}
}});
}
}
Aquí está el código para activar la clase de perfil
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;
}
Después de algunos días buscando en Internet encontré que este error usualmente ocurre cuando un ID de elemento html tiene el mismo ID que una variable en la función javascript. Después de cambiar el nombre de uno de ellos, mi código funcionaba bien.
En mi caso, tenía un código como este:
function.call(context, arg);
Recibí un mensaje de error debajo de IE
TypeError: el objeto no admite la propiedad o el método ''error''
En el cuerpo de ''function'' tuve "console.error" y resulta que el objeto de la consola no está definido cuando la consola está cerrada. Lo he arreglado comprobando si console y console.error están definidos
Este es un problema común en las aplicaciones web que emplean el espacio de nombres JavaScript. Cuando este es el caso, el problema 99.9% del tiempo es la incapacidad de IE de vincular métodos dentro del espacio de nombre actual a la palabra clave "this".
Por ejemplo, si tengo el espacio de nombres JS "" con el método "isAwesome". Normalmente, si se encuentra dentro del espacio de nombres "" puede invocar el método "isAwesome" con la siguiente sintaxis:
this.isAwesome();
Chrome, Firefox y Opera aceptarán esta sintaxis. IE por otro lado, no lo hará. Por lo tanto, la apuesta más segura al utilizar el espacio de nombres JS es siempre el prefijo con el espacio de nombres real. A la:
.isAwesome();
Este problema puede ocurrir debido a una versión incorrecta de jquery. como 1.4, etc., donde el método done no es compatible
He agregado var para todas las variables en el javascript corrosponding. Eso resolvió el problema en IE.
Código anterior
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();
Nuevo código
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();
Implemente "use strict"
en todas las etiquetas de script para encontrar inconsistencias y corregir posibles variables no codificadas.
Mi problema era tener type="application/javascript"
en la etiqueta <script>
para jQuery. IE8 no le gusta esto! Si su página web es HTML5, ni siquiera necesita declarar el tipo, de lo contrario vaya con type="text/javascript"
lugar.
Olvidé usar var
en mi variable de artículo
Código incorrecto:
var itemCreateInfo = new SP.ListItemCreationInformation();
item = list.addItem(itemCreateInfo);
item.set_item(''Title'', ''Haytham - Oil Eng'');
Código correcto:
var itemCreateInfo = new SP.ListItemCreationInformation();
var item = list.addItem(itemCreateInfo);
item.set_item(''Title'', ''Haytham - Oil Eng'');
Tenía lo siguiente
document.getElementById("search-button") != null
que funcionó bien en todos los navegadores excepto ie8. (No revisé ie6 o ie7)
Lo cambié a
document.getElementById("searchBtn") != null
y actualicé el atributo id en el campo en mi html y ahora funciona en ie8