2011-09-18 47 views
2

上不起作用如何在IE6中將函數附加到全局文檔對象,並且仍能夠在調用時捕獲該函數拋出的異常?IE6 Try/Catch塊在自定義document.someFunction調用

出人意料的是,異常不會對功能之外下面的例子中傳播,在IE6:

// Declare function on document 
document.someFn = function() 
{ 
    throw new Error('Raised error'); 
} 

// IE6: bug?? 
try{ 
    document.someFn('some parameter'); 
    alert('2. error has not been raised: bad!'); 
} 
catch(err) { 
} 

您可以嘗試的例子,在這裏一些額外的測試案例:

http://www.pokret.org/stuff/ie6-bug-test.html

任何解決方法的想法?

+1

爲什麼你甚至還試圖附加功能文件對象?! – c69

+0

它看起來很瘋狂,但根據[DOM XPath](http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator),** createExpression **和其他函數必須在**文件**對象上提供,以符合上述標準。 –

回答

-1
function someFn (txt) { 
    throw new Error('Raised error: ' + txt); 
} 

try { 
    someFn('im dead'); 
    alert('im alive'); // will not be shown 
} catch(err) { 
    if('description' in err) { 
     alert(err.description); // IE 
    } else { 
     alert(err); // other browsers 
    } 

} 

關於try...catch在MSDN上的MSDN文章。

+0

我的代碼中有錯誤嗎?爲什麼downvote呢? :/ – c69

+0

不是我的失望,但我明白你爲什麼得到它。 OP想把'someFn'附加到'document'。你沒有,因此它不回答這個問題。 – Jakob

+0

tnx ..但正如你可以從代碼評論 - 他是**宣佈一個函數** - 所以我認爲,他只是做錯了,並忽略。 – c69

1

我知道這是一個紀念碑式的老問題,但以防萬一有人我跑了同樣的問題後走來,我發現,這似乎工作:

// Declare function on document 
document.someFn = function() { 
    throw new Error('Raised error'); 
} 

try { 
    document.someFn.apply(null, 'some parameter'); 
    alert('2. error has not been raised: bad!'); 
} 
catch(err) { 
} 
+0

是的,我做了這樣的事情,但將「文檔」傳遞給apply()而不是「null」會更合適。 –