IE8在访问插件的任何属性或方法时崩溃,插件在IE10和11中正常工作。
我发现了坠机原因: 在IE8中,由于某种原因,ComPromise的m_settled仍然是假的。 当ComPromise Object销毁时,destroy方法调用ComPromise :: _ on onError并崩溃。
--- a/src/ActiveXCore/ComPromise.h
+++ b/src/ActiveXCore/ComPromise.h
@@ -53,7 +53,7 @@ namespace FB { namespace ActiveX {
void Invalidate() {
if (!m_settled) {
- _onError(std::runtime_error("Invalidated"));
+ //_onError(std::runtime_error("Invalidated"));
}
m_promise.invalidate();
}
在对代码进行评论之后,当我访问插件版本时,IE不会崩溃并返回script_error(方法调用失败)。 在调试模式下,IDispatchAPI.cpp(478)中的HRESULT为0x80020003。