Приостановить выполнение JavaScript в UIWebView - PullRequest
10 голосов
/ 20 января 2012

Я поместил несколько UIWebView с рядом в UIScrollView.Каждый UIWebView включает представление «веб-браузер», в котором отображается локальный файл HTML.К сожалению, я понятия не имею, как загрузить веб-представления в фоновом режиме и в то же время предотвратить или остановить выполнение функций JavaScript, включенных в HTML-файлы.Я имею в виду «в фоновом режиме», когда наблюдаю за первыми несколькими панелями, а тем временем остальные панели просто лениво загружаются.Я видел, как это делают разные приложения (например, pugpig) - он лениво загружает HTML-страницы и останавливает анимацию JavaScript - он может каким-то образом останавливать JavaScript для анимации всего эффекта затухания, который я часто использую в своих HTML-страницах между переключателями вкладок и в данный моментЯ загружаю панель, она продолжает анимацию затухания.

Итак, вопрос:

Как я могу приостановить анимацию JavaScript и предотвратить проблемы с памятью, используя код Objective-C, и как я могу продолжить анимацию затухания после отображения панели?

Ответы [ 3 ]

4 голосов
/ 22 сентября 2012

Вы пытались внедрить JavaScript (то есть - (NSString *) stringByEvaluatingJavaScriptFromString: (NSString *) скрипт ), который наблюдает onblur и onfocus window или pageshow и pagehide? Этот пост предлагает пару решений для этого.

Итак, вы можете попробовать что-то вроде

$(window).blur(function(){
  // when the web view loses focus
});
$(window).focus(function(){
  // when the web view gains focus
});

Если это не удастся, вы можете попробовать события pagehide и pageshow:

function pageShown(evt)
{
    if (evt.persisted)
        // The page was just restored from the Page Cache
    else
        // The initial load. This is the same as the page load event
}

function pageHidden(evt)
{
    if (evt.persisted)
        // The page was suspended and placed into the Page Cache
    else
        // This is the same as the page unload event
}

window.addEventListener("pageshow", pageShown, false);
window.addEventListener("pagehide", pageHidden, false);
1 голос
/ 29 сентября 2012

Полагаю, вы можете управлять анимацией javascripts, которая запускается в HTML (вы сказали, что страница локальная).Что бы я сделал, чтобы обернуть анимацию в функцию JS, которая будет вызываться из Какао (для этого есть множество ссылок на StackOverFlow, например - (NSString *) stringByEvaluatingJavaScriptFromString: (NSString *) script ).

Тогда я бы создал стек, в котором есть запись для каждой из HTML-страниц, которые вы хотите загружать с отложенной загрузкой.На каждом UIScrollView scrollViewDidScroll: я бы проверил, выполнялась ли прокрутка в размере целого размера веб-просмотра, если бы я вынул эту запись из стека и вызвал бы функцию startAnimation Javascript, о которой мы упоминали ранее при следующем веб-просмотре.

Если вам нужно, например, двустороннее общение (от javascript до какао), чтобы указать, что анимация завершена, вы можете использовать JSBridge .( Как вызвать метод Objective C из JavaScript в UIWebView? )

0 голосов
/ 26 сентября 2012

Может быть, вы можете попытаться оценить (используя stringByEvaluatingJavaScriptFromString) заведомо неисправный фрагмент кода JavaScript и вызвать переполнение js-интерпретатора?

<script> var j =     // note: missing value, error!
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...