1

请看http://www.idea-palette.com

我有多个页面正在使用顶部导航淡化。当用户使用 jQuery Cycle 插件单击上述任何按钮以淡入包含幻灯片的另一个页面时,IE7 崩溃。

当我注释掉控制幻灯片淡入淡出的 jQuery 时,IE7 不再崩溃。你可以在这里看到:http ://www.idea-palette.com/IEindex.php

我猜 IE7 不喜欢它淡入淡出的某些内容,其中包含一些其他内容已经在淡出的过程中。我猜这两者以某种方式使 IE7 过载,所以它崩溃了。

在我发现 jQuery Cycle Plugin 导致页面崩溃之前,我询问了为什么会这样(为什么我的网站在 IE 中崩溃?),stackoverflow 上的 jeffamaphone 在查看我的网站时发现了以下信息:

'它与你的 DirectX 过滤器有关(可能是什么在做淡入淡出)。这是堆栈,EAX 为 NULL。无论代码在做什么都是试图取消 EAX:

CDXTFilterBehavior::_ClearSurface: 6C8E87E1 mov edi,edi 6C8E87E3 push ebp
6C8E87E4 mov ebp,esp 6C8E87E6 push ecx
6C8E87E7 mov eax,dword ptr [ebp+0Ch] 6C8E87EA mov ecx,dword ptr [eax] <--- EAX 为 NULL

dxtrans.dll!CDXTFilterBehavior::_ClearSurface()
dxtrans.dll!CDXTFilterBehavior::_DrawUnfilteredElementLayers()
dxtrans.dll!CDXTFilterBehavior::_DrawElementWithProceduralSurfaces()
dxtrans.dll!CDXTFilterBehavior::_ExecuteFilterChain()
dxtrans.dll!CDXTFilterBehavior::Draw()
mshtml.dll!CPeerHolder::Draw()
mshtml.dll!CLayout::DrawClientLayers()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispContainer::DrawChildren()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispContainer::DrawChildren()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispContainer::DrawChildren()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispContainer::DrawChildren()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispContainer::DrawChildren()
mshtml.dll!CDispContainer::DrawSelf()
mshtml.dll!CDispNode::Draw()
mshtml.dll!CDispRoot::DrawEntire()
mshtml.dll!CDispRoot::DrawRoot()
mshtml.dll!CView::RenderView()
mshtml.dll!CDoc::OnPaint()
mshtml.dll!CServer::OnWindowMessage()
mshtml.dll!CDoc::OnWindowMessage()
mshtml.dll!CServer::WndProc()
user32.dll!_InternalCallWinProc@20()
user32.dll!_UserCallWinProcCheckWow@32()
user32.dll!_CallWindowProcAorW@24()
user32.dll!_CallWindowProcW@20()
user32.dll! _InternalCallWinProc@20()
user32.dll!_UserCallWinProcCheckWow@32()
user32.dll!_DispatchClientMessage@20()
user32.dll!_fnDWORD@4()
ntdll.dll!_KiUserCallbackDispatcher@12()
user32.dll!_NtUserDispatchMessage@4()
user32.dll!_DispatchMessageWorker@8()
user32.dll!_DispatchMessageW@4()
ieframe.dll!CTabWindow::_TabWindowThreadProc()
kernel32.dll!@BaseThreadInitThunk@12()
ntdll.dll!_RtlUserThreadStart@8()
ntdll.dll!_RtlUserThreadStart@8()

也许您正在从 DOM 中删除一个元素,而转换仍在对其进行操作?

有人知道我该如何解决这个问题吗?

4

1 回答 1

2

正如我在您上次发布此内容时的评论中提到的,如果您可以远程使 IE 崩溃,您应该联系 Microsoft。此漏洞至少可导致拒绝服务攻击,并可能导致远程代码执行或远程 root(使网页按需崩溃浏览器的错误很可能被利用以允许攻击者运行不受信任的代码在您的机器上)。虽然这里的人可能能够帮助您解决您的问题,但确实应该通知 Microsoft,以便他们可以修复潜在的错误。

编辑:为了尝试解决您自己的问题,以及为了报告错误,您应该尝试将问题减少到最小的测试用例。将所有内容剥离为足以重现错误的最小元素集。然后对代码执行相同的操作。你应该努力得到一个只有一两个图像的测试用例,只有触发问题的交叉淡入淡出,没有其他东西。

然后,是的,要报告错误,请向他们发送指向您的最小测试用例的链接(或者如果可以的话,将其包含在错误报告中)。提到它是一个远程拒绝服务漏洞,你不知道它是否会导致远程代码执行。

正如我所提到的,将其缩减为一个最小的示例应该能够帮助您解决您的错误。至少,你更有可能在这里获得关于最小代码示例的帮助,而不是整个网站,其中有很多东西正在发生,没有人真正喜欢挖掘。

于 2009-04-08T04:24:00.383 回答