我目前正在使用由主機應用程序提供的外部對象模型的僅限IE的項目。 Internet Explorer允許通過瀏覽器組件訪問這個外部對象: http://msdn.microsoft.com/en-us/library/ie/ms535246(v=vs.85).aspx在Internet Explorer中使用JavaScript重寫外部對象的函數
訪問對象採用JavaScript函數調用的形式,類似於:
external.MethodName(arg1, arg2);
一個最近的更改應用程序流會引進數百,甚至數千if語句這些JavaScript調用周圍條件語句,例如:
if (X) {
external.MethodName(arg1, arg2);
} else {
// do something else
}
而不是潛在的修改HTML成千上萬的FIL es,如果我們可以重寫或重寫外部對象的函數以使if條件只出現在一個地方,那麼似乎是有道理的。通常情況下,這可能在JavaScript來實現與:
external.OldMethodName = external.MethodName;
external.MethodName = function(arg1, arg2) {
if (X) {
external.OldMethodName(arg1, arg2);
} else {
// do something else
}
};
然而,這會導致「無效的過程調用或參數」腳本錯誤,因爲你不能引用外部主機方式這種方式。
我無法訪問主機應用程序專有代碼來直接更改外部方法。我有什麼辦法可以使用JavaScript來重寫外部對象的函數,或者我需要用if語句包裝(潛在的)數千個調用(一個非常糟糕的做法)嗎?
更新:經過與客戶端的大量來回之後,我們設法聯繫第三方供應商更新外部主機方法,這比我們的包裝方法更好前端。與此同時,我接受了保羅的答案。