Ich habe in meiner Anwendung eine Option, mit der Benutzer ihre Profile deaktivieren können. Nur der Admin kann sie wieder aktivieren.
Ich habe eine Klasse ActivateProfile
mit zwei Methoden
userExist(userName)
überprüft, ob ein Benutzer mit diesem Benutzernamen existiert und sein Profil deaktiviert istactivateAccountByUser(userName)
, die das Profil des Benutzers erneut aktivierenIch rufe eine JavaScript-Funktion für das Klickereignis einer Eingabetaste auf. Dieser Code funktioniert gut in Chrome und Mozilla, aber in Internet Explorer wird diese Fehlermeldung angezeigt:
SCRIPT438: Objekt unterstützt nicht die Eigenschaft oder Methode 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");
}
}});
}
}
Hier ist der Code für die Activate-Profilklasse
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;
}
Nachdem ich einige Tage im Internet gesucht hatte, stellte ich fest, dass dieser Fehler normalerweise auftritt, wenn eine HTML-Element-ID dieselbe ID hat wie eine Variable in der Javascript-Funktion. Nachdem ich den Namen einer von ihnen geändert hatte, funktionierte mein Code einwandfrei.
Dies ist ein häufiges Problem bei Webanwendungen, die JavaScript-Namespaces verwenden. Wenn dies der Fall ist, besteht das Problem 99,9% der Zeit darin, dass der IE keine Methoden im aktuellen Namespace an das Schlüsselwort "this" binden kann.
Wenn ich beispielsweise den JS-Namensraum "StackOverflow" mit der Methode "isAwesome" habe. Wenn Sie sich innerhalb des Namespace "StackOverflow" befinden, können Sie die Methode "isAwesome" normalerweise mit der folgenden Syntax aufrufen:
this.isAwesome();
Chrome, Firefox und Opera akzeptieren diese Syntax gerne. IE dagegen nicht. Daher ist es bei der Verwendung von JS-Namespaces der sicherste Einsatz, immer den tatsächlichen Namespace voranzustellen. A la:
StackOverflow.isAwesome();
Ich habe var für alle Variablen im entsprechenden Javascript hinzugefügt .. _ Das hat das Problem im IE gelöst.
Vorheriger Code
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();
Neuer 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();
Mein Problem war, type="application/javascript"
auf dem <script>
-Tag für jQuery zu haben. IE8 mag das nicht! Wenn Ihre Webseite HTML5 ist, müssen Sie nicht einmal den Typ angeben, ansonsten gehen Sie stattdessen mit type="text/javascript"
.
In meinem Fall hatte ich folgenden Code:
function.call(context, arg);
Ich habe eine Fehlermeldung unter IE erhalten.
TypeError: Objekt unterstützt weder die Eigenschaft noch die Methode 'error'.
Im Hauptteil von 'function' hatte ich "console.error" und es wird das Konsolenobjekt undefiniert, wenn Ihre Konsole geschlossen wird. Ich habe das Problem behoben, indem überprüft wurde, ob console und console.error definiert sind
Implementieren Sie "use strict"
in allen Skript-Tags, um Inkonsistenzen zu finden und mögliche nicht definierte Variablen zu beheben!
Wir konnten dieses Problem lösen, indem Sie den zu importierenden Dateien Polyfill Object.Assign hinzufügen und den Fehler auslösen. Wir würden es zum höchsten Import machen, auf diese Weise wäre es für den anderen Code verfügbar, der im Stack aufgerufen werden soll.
import "mdn-polyfills/Object.assign";
Ich habe vergessen, var
für meine Artikelvariable zu verwenden
Falscher Code:
var itemCreateInfo = new SP.ListItemCreationInformation();
item = list.addItem(itemCreateInfo);
item.set_item('Title', 'Haytham - Oil Eng');
Korrekter Code:
var itemCreateInfo = new SP.ListItemCreationInformation();
var item = list.addItem(itemCreateInfo);
item.set_item('Title', 'Haytham - Oil Eng');