Приложение iOS, использующее веб-представление, аварийно завершает работу без хорошего сообщения об ошибке - PullRequest
1 голос
/ 09 февраля 2012

Я работаю над приложением для iPad, которое в основном является веб-представлением. Он обслуживается веб-приложением, которое использует jQuery mobile, iScroll и некоторые незначительные плагины. Единственными двумя подключаемыми модулями, которые являются единообразными для всего приложения, являются 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 Ответ

1 голос
/ 10 февраля 2012

Хорошо, похоже, я наконец-то решил проблему. Думал, что поделюсь этим здесь.

Я до сих пор точно не знаю, что вызвало сбой приложения, но обнаруженное мной исправление, похоже, решило проблему.

Таким образом, поскольку все, что я получил в выводе в 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>.)

...