使用Web视图的iOS应用程序随机崩溃,没有好的错误消息

时间:2012-02-09 16:38:41

标签: xcode xcode4 jquery-mobile webkit

我正在开发一款主要是网络视图的iPad应用。它是一个使用jQuery mobile,iScroll和一些小插件的Web应用程序。在应用程序中只有两个一致的插件是jQuery mobile和iScroll,所以我不会列出所有小插件,因为在各种不同情况下可以在应用程序中触发相同的崩溃。

我遇到的真正问题是xCode给我的唯一消息是WebCore在崩溃之前正在做的事情。我无法做出正面或反面。我一整天都在寻找解决问题的办法,但一直没找到。

输出如下:

1   WebCore::ScriptExecutionContext::destroyedActiveDOMObject(WebCore::ActiveDOMObject*)
2   WebCore::ActiveDOMObject::~ActiveDOMObject()
3   WebCore::SuspendableTimer::~SuspendableTimer()
4   WebCore::DOMTimer::~DOMTimer()
5   WebCore::DOMTimer::removeById(WebCore::ScriptExecutionContext*, int)
6   WebCore::DOMWindow::clearTimeout(int)
7   WebCore::jsDOMWindowPrototypeFunctionClearTimeout(JSC::ExecState*)
8   JSC::Interpreter::privateExecute(JSC::Interpreter::ExecutionFlag, JSC::RegisterFile*, JSC::ExecState*)
9   JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&)
10  JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&, JSC::JSValue, JSC::ArgList const&)
11  WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*)
12  WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector<WebCore::RegisteredEventListener, 1ul>&)
13  WebCore::EventTarget::fireEventListeners(WebCore::Event*)
14  WebCore::Node::handleLocalEvents(WebCore::Event*)
15  WebCore::EventContext::handleLocalEvents(WebCore::Event*) const
16  WebCore::EventDispatcher::dispatchEvent(WTF::PassRefPtr<WebCore::Event>)
17  WebCore::EventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const
18  WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WebCore::EventDispatchMediator const&)
19  WebCore::Node::dispatchEvent(WTF::PassRefPtr<WebCore::Event>)
20  WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr<WebCore::Event>, int&)
21  WebCore::EventHandler::dispatchTouchEvent(WebCore::PlatformTouchEvent const&, WTF::AtomicString const&, WTF::HashMap<WebCore::EventTarget*, WTF::Vector<WTF::RefPtr<WebCore::Touch>, 0ul>*, WTF::PtrHash<WebCore::EventTarget*>, WTF::HashTraits<WebCore::EventTarget*>, WTF::HashTraits<WTF::Vector<WTF::RefPtr<WebCore::Touch>, 0ul>*> > const&, float, float)
22  WebCore::EventHandler::handleTouchEvent(WebCore::PlatformTouchEvent const&)
23  WebCore::EventHandler::touchEvent(WebEvent*)
24  -[WebHTMLView touch:]
25  -[WAKView _handleEvent:]
26  _ZL13eventCallbackP6WKViewP8WebEventPv
27  _WKViewHandleEvent
28  WKWindowSendEvent
29  -[UIWebBrowserView _dispatchWebEvent:]
30  -[UIWebBrowserView _webTouchEventsRecognized:]
31  -[NSObject performSelector:withObject:]

我得到的唯一真正错误是Thread 1: Program received signal: "EXC_BAD_ACCESS"

提前致谢,我很高兴能得到任何帮助。请指出我正确的方向。

1 个答案:

答案 0 :(得分:1)

好的,好像我终于解决了这个问题。以为我会在这里分享。

我仍然不知道究竟是什么导致应用程序崩溃,但我发现的修复似乎解决了这个问题。

所以,因为我在xcode的输出中得到的东西来自webkits核心(至少我认为这与我对此有限的知识),这使我开始查看正在提供webview的网站。

我已经阅读了很多关于移动设备中html5视频问题的内容,所以我开始关注它。我改变了所有的JavaScript并为网站提供了一个单独的html 5视频元素。一切都很好,但是当我添加回jQuery-mobile时,一旦我在视频播放的同时尝试滚动,就会返回崩溃。

我之前知道在iOS设备上使用海报图片时存在一些问题。所以我删除了这个,这就是诀窍。

总结一下:

这就是我所拥有的:

<video class="videoSignPlayer" poster="poster.jpg" width="768" height="512" style="display:none;">
    <source src="movie.mp4" width="768" type='video/mp4;
     codecs="avc1.4D401E, mp4a.40.2"' />
</video>

这是工作标记:

<video class="videoSignPlayer" width="768" height="512" style="display:none;">
    <source src="movie.mp4" width="768" type='video/mp4;
     codecs="avc1.4D401E, mp4a.40.2"' />
</video>

简单修复。

使用jQuery-mobile时,在视频元素上使用poster属性似乎有问题。

(是的,我也尝试在<img>标签中预加载海报图片。崩溃的唯一解决方法是完全删除<video>标签上的海报属性。)