web-dev-qa-db-ja.com

SCRIPT438:オブジェクトはプロパティまたはメソッドIEをサポートしていません

私のアプリケーションには、ユーザーがプロファイルを無効にできるオプションがあります。それらを再度アクティブにできるのは管理者だけです。

2つのメソッドを持つクラスActivateProfileがあります

  • userExist(userName)そのuserNameを持つユーザーが存在し、そのプロファイルが無効化されているかどうかを確認します
  • およびactivateAccountByUser(userName)ユーザーのプロファイルを再度アクティブにします

入力タイプのボタンのクリックイベントでJavaScript関数を呼び出します。このコードはChromeおよびMozillaで正常に動作しますが、Internet Explorerではこのエラーが発生します。

SCRIPT438:オブジェクトはプロパティまたはメソッド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");
         }
      }});
   }
}

プロファイルクラスのアクティブ化のコードは次のとおりです。

 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;
}
58
vikifor

インターネットを検索して数日後、このエラーは通常、html要素IDがjavascript関数の変数と同じIDを持つときに発生することがわかりました。それらのいずれかの名前を変更した後、私のコードは正常に機能していました。

88
vikifor

これは、JavaScriptネームスペースを使用するWebアプリケーションの一般的な問題です。この場合、99.9%の問題は、IEが現在のネームスペース内のメソッドを「this」キーワードにバインドできないことです。

たとえば、メソッド「isAwesome」を持つJS名前空間「StackOverflow」がある場合。通常、「StackOverflow」名前空間内にいる場合、次の構文で「isAwesome」メソッドを呼び出すことができます。

this.isAwesome();

Chrome、Firefox、Operaはこの構文を喜んで受け入れます。 IE一方、そうしません。したがって、JSネームスペースを使用する際の最も安全な方法は、常に実際のネームスペースをプレフィックスとして付けることです。アラ:

StackOverflow.isAwesome();
8
pim

対応するjavascriptのすべての変数にvarを追加しました。これでIEの問題が解決しました。

前のコード

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();   

新しいコード

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

私の問題は、jQueryのtype="application/javascript"タグに<script>があったことです。 IE8はこれを好まない! WebページがHTML5の場合、タイプを宣言する必要さえありません。そうでない場合は、代わりにtype="text/javascript"を使用します。

1
Lynxy

私の場合、次のようなコードがありました。

function.call(context, arg);

IEでエラーメッセージが表示されました

TypeError:オブジェクトはプロパティまたはメソッド 'error'をサポートしていません

「関数」の本文には「console.error」があり、コンソールを閉じたときにコンソールオブジェクトが未定義になることがわかりました。 consoleとconsole.errorが定義されているかどうかを確認することでこれを修正しました

1
osoitza

すべてのスクリプトタグに"use strict"を実装して、矛盾を見つけ、潜在的なスコープ外の変数を修正します。

0
Alex

インポートするファイルにObject.Assignポリフィルを追加してエラーをスローすることで、この問題を解決できました。スタックで呼び出される他のコードで利用できるように、それを最高のインポートにします。

import "mdn-polyfills/Object.assign";

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

0

アイテム変数でvarを使用するのを忘れました

間違ったコード:

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

正しいコード:

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